android 如何获取手机当前的Activity实例

android 如何获取手机当前的Activity实例,第1张

获取activity实例有两种办法:

1、通首数过世芦context来获搜芹带取,简单方便:

private String getRunningActivityName() {

String contextString = context.toString()

return contextString.substring(contextString.lastIndexOf(".") + 1, contextString.indexOf("@"))

}

2、通过特定权限获取

<uses-permission android:name="android.permission.GET_TASKS" />

private String getRunningActivityName(){

ActivityManager activityManager=(ActivityManager) getSystemService(Context.ACTIVITY_SERVICE)

String runningActivity=activityManager.getRunningTasks(1).get(0).topActivity.getClassName()

return runningActivity

}

1)一个 Android 程序开始运行时,会单独启动一个Process。默认情况下,所有这个程序中的Activity或者Service都会跑在这个Process。默认情况下,一个Android程序也只有一个Process,但一个Process下却可以有许多个Thread。2)一个 Android 程序开始运行时,就有一个主线程Main Thread被创建。该线程主要负责UI界面的显示、更新和控件交互,所以又叫UI Thread。3)一个Android程序创建之初,一个Process呈现的是单线程模型--即MainThread,所有的任务都在一个线程中运行,所以,MainThread所调用的每一个顷岩凳函数,其耗时应该越短越好,而对于比较耗时的工作,应该交给子线程去做,以避免主线程(UI线程)被阻塞,导致程序出现ANR(Application not response)一个Activity就运行在一个线程中吗?或者编码时,如果不是明确安排在不同线程中的两个Activity,其就都是在同一个线程中?那从一个Activity跳转到另一个Activity时,是不是跳出的那个Activity就处在睡眠状态了?【答】 每个Activity都有一个Process属性,可以指定该Activity是属于哪个进程的。当然如果不明确指明,应该就是从属于默认进程(Application指定的,如其未指定,应该就是默认主进程)。Android中有Task的概念,而同一个Task的各个Activity会形成一个栈,只有站定的Activity才有机会与用户交互。原文地址:Android中的进程与线程 原文作者:江鹏当应用程序的组件第一次运行时,Android将启动一个只有一个执行线程的Linux进程。默认,应枣蚂用程序所有的组件运行在这个进程和线程中。然而,你可以安排组件运行在其他进程中,且你可以为进程衍生出其它线程。本文从下面几点来介绍Android的进程与线程:1、进程组件运行于哪个进程中由清单文件控制。组件元素——<activity>、<service>、<receiver>、<provider>,都有一个process属性可以指定组件运行在哪个进程中。这个属性可以设置为每个组件运行在自己的进程中,或者某些组件共享一个进程而其他的不共享。他们还可以设置为不同应用雀旅程序的组件运行在同一个进程中——假设这些应用程序共享同一个Linux用户ID且被分配了同样的权限。<application>元素也有process属性,为所有的组件设置一个默认值。所有的组件都在特定进程的主线程中实例化,且系统调用组件是由主线程派遣。不会为每个实例创建单独的线程,因此,对应这些调用的方法——诸如View.onKeyDown()报告用用户的行为和生命周期通知,总是运行在进程的主线程中。这意味着,没有组件当被系统调用时应该执行很长时间或阻塞 *** 作(如网络 *** 作或循环计算),因为这将阻塞进程中的其它组件。你可以为长 *** 作衍生独立的线程。public boolean onKeyDown(int keyCode,KeyEvent event):默认实现KeyEvent.Callback.onKeyMultiple(),当按下视图的KEYCODE_DPAD_CENTER或KEYCODE_ENTER然后释放时执行,如果视图可用且可点击。参数keyCode-表示按钮被按下的键码,来自KeyEvent event-定义了按钮动作的KeyEvent对象返回值如果你处理事件,返回true;如果你想下一个接收者处理事件,返回false。当内存剩余较小且其它进程请求较大内存并需要立即分配,Android要回收某些进程,进程中的应用程序组件会被销毁。当他们再次运行时,会重新开始一个进程。当决定终结哪个进程时,Android会权衡他们对用户重要性的相对权值。例如,与运行在屏幕可见的活动进程相比(前台进程),它更容易关闭一个进程,它的活动在屏幕是不可见(后台进程)。决定是否终结进程,取决于运行在进程中的组件状态。关于组件的状态,将在后面一篇——组件生命周期中介绍。2、线程虽然你可能会将你的应用程序限制在一个进程中,但有时候你会需要衍生一个线程做一些后台工作。因为用户界面必须很快地响应用户的 *** 作,所以活动寄宿的线程不应该做一些耗时的 *** 作如网络下载。任何不可能在短时间完成的 *** 作应该分配到别的线程。线程在代码中是用标准的Java线程对象创建的,Android提供了一些方便的类来管理线程——Looper用于在线程中运行消息循环、Handler用户处理消息、HandlerThread用户设置一个消息循环的线程。Looper类该类用户在线程中运行消息循环。线程默认没有消息循环,可以在线程中调用prepare()创建一个运行循环;然后调用loop()处理消息直到循环结束。大部分消息循环交互是通过Handler类。下面是一个典型的执行一个Looper线程的例子,分别使用prepare()和loop()创建一个初始的Handler与Looper交互: 1. Android中进程与进程、线程与线程之间如何通信?1)一个 Android 程序开始运行时,会单独启动一个Process。默认情况下,所有这个程序中的Activity或者Service都会跑在这个Process。默认情况下,一个Android程序也只有一个Process,但一个Process下却可以有许多个Thread。2)一个 Android 程序开始运行时,就有一个主线程Main Thread被创建。该线程主要负责UI界面的显示、更新和控件交互,所以又叫UI Thread。3)一个Android程序创建之初,一个Process呈现的是单线程模型--即MainThread,所有的任务都在一个线程中运行,所以,MainThread所调用的每一个函数,其耗时应该越短越好,而对于比较耗时的工作,应该交给子线程去做,以避免主线程(UI线程)被阻塞,导致程序出现ANR(Application not response)一个Activity就运行在一个线程中吗?或者编码时,如果不是明确安排在不同线程中的两个Activity,其就都是在同一个线程中?那从一个Activity跳转到另一个Activity时,是不是跳出的那个Activity就处在睡眠状态了?【答】 每个Activity都有一个Process属性,可以指定该Activity是属于哪个进程的。当然如果不明确指明,应该就是从属于默认进程(Application指定的,如其未指定,应该就是默认主进程)。Android中有Task的概念,而同一个Task的各个Activity会形成一个栈,只有站定的Activity才有机会与用户交互。原文地址:Android中的进程与线程 原文作者:江鹏当应用程序的组件第一次运行时,Android将启动一个只有一个执行线程的Linux进程。默认,应用程序所有的组件运行在这个进程和线程中。然而,你可以安排组件运行在其他进程中,且你可以为进程衍生出其它线程。本文从下面几点来介绍Android的进程与线程:1、进程组件运行于哪个进程中由清单文件控制。组件元素——<activity>、<service>、<receiver>、<provider>,都有一个process属性可以指定组件运行在哪个进程中。这个属性可以设置为每个组件运行在自己的进程中,或者某些组件共享一个进程而其他的不共享。他们还可以设置为不同应用程序的组件运行在同一个进程中——假设这些应用程序共享同一个Linux用户ID且被分配了同样的权限。<application>元素也有process属性,为所有的组件设置一个默认值。所有的组件都在特定进程的主线程中实例化,且系统调用组件是由主线程派遣。不会为每个实例创建单独的线程,因此,对应这些调用的方法——诸如View.onKeyDown()报告用用户的行为和生命周期通知,总是运行在进程的主线程中。这意味着,没有组件当被系统调用时应该执行很长时间或阻塞 *** 作(如网络 *** 作或循环计算),因为这将阻塞进程中的其它组件。你可以为长 *** 作衍生独立的线程。public boolean onKeyDown(int keyCode,KeyEvent event):默认实现KeyEvent.Callback.onKeyMultiple(),当按下视图的KEYCODE_DPAD_CENTER或KEYCODE_ENTER然后释放时执行,如果视图可用且可点击。参数keyCode-表示按钮被按下的键码,来自KeyEvent event-定义了按钮动作的KeyEvent对象返回值如果你处理事件,返回true;如果你想下一个接收者处理事件,返回false。当内存剩余较小且其它进程请求较大内存并需要立即分配,Android要回收某些进程,进程中的应用程序组件会被销毁。当他们再次运行时,会重新开始一个进程。当决定终结哪个进程时,Android会权衡他们对用户重要性的相对权值。例如,与运行在屏幕可见的活动进程相比(前台进程),它更容易关闭一个进程,它的活动在屏幕是不可见(后台进程)。决定是否终结进程,取决于运行在进程中的组件状态。关于组件的状态,将在后面一篇——组件生命周期中介绍。2、线程虽然你可能会将你的应用程序限制在一个进程中,但有时候你会需要衍生一个线程做一些后台工作。因为用户界面必须很快地响应用户的 *** 作,所以活动寄宿的线程不应该做一些耗时的 *** 作如网络下载。任何不可能在短时间完成的 *** 作应该分配到别的线程。线程在代码中是用标准的Java线程对象创建的,Android提供了一些方便的类来管理线程——Looper用于在线程中运行消息循环、Handler用户处理消息、HandlerThread用户设置一个消息循环的线程。Looper类该类用户在线程中运行消息循环。线程默认没有消息循环,可以在线程中调用prepare()创建一个运行循环;然后调用loop()处理消息直到循环结束。大部分消息循环交互是通过Handler类。下面是一个典型的执行一个Looper线程的例子,分别使用prepare()和loop()创建一个初始的Handler与Looper交互: 2.1、远程过程调用(Remote procedure calls,RPCs)Android有一个轻量级的远程过程调用机制——方法在本地调用却在远程(另外一个进程中)执行,结果返回给调用者。这需要将方法调用和它伴随的数据分解为 *** 作系统能够理解的层次,从本地进程和地址空间传输到远程进程和地址空间,并重新组装调用。返回值以相反方向传输。Android提供了做这些工作的所有代码,这样我们可以专注于定义和执行RPC接口本身。一个RPC接口仅包含方法。所有的方法同步地执行(本地方法阻塞直到远程方法执行完成),即使是没有返回值。简言之,该机制工作原理如下:首先,你用简单的IDL(interface definition language,接口定义语言)声明一个你想实现的RPC接口。从这个声明中,aidl工具生成一个Java接口定义,提供给本地和远程进程。它包含两个内部类,如下图所示:内部类有管理你用IDL定义的接口的远程过程调用所需要的所有代码。这两个内部类都实现了IBinder接口。其中之一就是在本地由系统内部使用,你写代码可以忽略它。另外一个是Stub,扩展自Binder类。除了用于有效地IPC(interprocess communication)调用的内部代码,内部类在RPC接口声明中还包含方法声明。你可以定义Stub的子类实现这些方法,如图中所示。通常情况下,远程过程有一个服务管理(因为服务能通知系统关于进程和它连接的其它进程的信息)。它有由aidl工具生成的接口文件和Stub子类实现的RPC方法。服务的客户端仅有由aidl工具生成的接口文件。下面介绍服务如何与它的客户端建立连接:· 服务的客户端(在本地端的)应该实现onServiceConnected() 和onServiceDisconnected() 方法,因此当与远程服务建立连接成功和断开连接是会通知它。然后调用bindService() 建立连接。 · 服务的onBind()方法将实现为接受或拒绝连接,者取决于它接受到的意图(该意图传送到binServive())。如果连接被接受,它返回一个Stub子类的实例。 · 如果服务接受连接,Android调用客户端的onServiceConnected()方法且传递给它一个IBinder对象,返回由服务管理的Stub子类的一个代理。通过代理,客户端可以调用远程服务。 这里只是简单地描述,省略了一些RPC机制的细节。你可以查阅相关资料或继续关注Android开发之旅,后面将为你奉上。2.2、线程安全方法在一些情况下,你实现的方法可能会被不止一个线程调用,因此必须写成线程安全的。这对远程调用方法是正确的——如上一节讨论的RPC机制。当从IBinder进程中调用一个IBinder对象中实现的一个方法,这个方法在调用者的线程中执行。然而,当从别的进程中调用,方法将在Android维护的IBinder进程中的线程池中选择一个执行,它不在进程的主线程中执行。例如,一个服务的onBind()方法在服务进程的主线程中被调用,在onBind()返回的对象中执行的方法(例如,实现RPC方法的Stub子类)将在线程池中被调用。由于服务可以有一个以上的客户端,所以同时可以有一个以上的线程在执行同一个IBinder方法。因此,IBinder的方法必须是线程安全的。同样,一个内容提供者可以接受其它进程产生的数据请求。虽然ContentResolver 和 ContentProvider 类隐藏进程通信如何管理的,对应哪些请求的ContentResolver 方法——query()、insert()、delete()、update()、getType(),在内容提供者的进程的线程池中被调用,而不是在这一进程的主线程中。因为这些方法可以同时从任意数量的线程中调用,他们也必须实现为线程安全的。

如何通过PC端连接Android设备进行adb调试

在电脑上下个adb工具包安装附加Google服务的,然后u *** 调试,电脑键盘win加r,然后后面的过程网上有教程

adb是什么?adb有什么用?adb工具如何用? 是用来管理模拟器和真机的通用调试工具,该工具功能强大,直接打开cmd即可使用adb命令,adb的全称为Android Debug Bridge,是起到调试桥的作用,通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具,adb的工作方式比较特殊,采用**Socket TCP 5554等端口的方式让IDE和Qemu通讯,默认情况下adb会daemon相关的网络端口,所以当返盯我们运行Eclipse时adb进程就会自动运行,借助adb工具我们可以管理设备或手机模拟器的状态,还可以进行很多手机 *** 作,如安装软件、系统升级、运行shell命令等等,其实简而言说,adb就是连接Android手机与PC端的桥梁,可以举游让用户在电脑上对手机进行全面的 *** 作 二:ADB的主要功能有哪些? 1:查看当前模拟器或者Android设备实例的状态 一般在使用前都会使用adb devices这个命令查看一下模拟器的状态,通过这个命令得到ADB的回应信息,可以看到ADB作为回应为每个实例制定了相关的信息 1.1:emulator-5554为实例名称 1.2:device为实例连接状态,device表示此实例正与adb相连接,offline表示此实例没有与adb连接或者无法响应 2:安装和卸载APK应用程序 你可以从电脑上复制一个APK应用到模拟器或者Android设备上,通过adb install <path_to_apk>安装软件,adb uninstall <packageName>卸载软件,如果你不知道这个包名,在AndroidManifest.xml里的找package=""就可以了 2.1: 先把apk文件拷贝到sdk目录下的tools 2.2: 进入dos下切换到SDK的安装路径下的tools目录 2.3 :执行安装命令 adb install <path_to_apk>发生的错误,因为我连接了真机,而且也打开了模拟器,所以adb给我的回应信息是“比一个多的驱动设备和模拟器”,我最后关闭掉了模拟器在运行安装命令,就提示安装成功了 卸载APK 3:从本机上复制文件到模拟器或者Android设备 adb push <本地路径><远程路径>,<本地路径>指的是自己的机器上或者模拟器上的目标文件,<远程路径>指的是远程设备实例上的目标文件 4:从模拟器复制文件到模拟器或者Android设备 adb pull <远程路径><本地路径>,<本地路径>指的是自己的机器上或者模拟器上的目标文件,<远程路径>指的是远程设备实例上的目标文件   5:使用shell命令 输入adb shell就可以进入shell命令行了,可以使用一些常用的shell命令,如:ls命令列出了文件

首先讲讲Android设备,大家都知道开发用的最多的Android设备就是手机了,今天主要讲两个Android设备的adb连接调试,一个是手机,一个是电视机顶盒。

一:手机端的adb调试

首先保证手机跟电脑处于同一个无线网

手机的IP地址查询:设置–关于手机–状态信息,就可以看到路由器分给手机的IP地址了,接下来就是adb调试

如何通过串口连接进行GDB调试

如果想利用gdb工具来调试程序,在编译程序时要正世销使用-g选项。如:

debian:~/c# g -g serial.c -o serial

调试serial程序。

debian:~/c# gdb serial

如何通过WIFI连接Android手机调试

1.首先让android手机来监听指定的端口:

这一步需要使用shell,因此手机上要有终端模拟器,不过网上很多,随便找个就行了,依次敲入下列几行:

su获取root权限

setprop service.adb.tcp.port 5555设置监听的端口,端口可以自定义,如5554,5555是默认的

s adbd关闭adbd

start adbd重新启动adbd2.

手机连接wifi并确保手机和电脑连接同一个网络

,记下手机的ip地址,假设为a.b.c.d

3.电脑上打开命令提示符,敲入以下命令:

如何通过adb连接

利用adb来连接手机, 有两种方式: 1, wifi, 2, u *** .

前提条件: 下载adb, 最好把对应的文件置于cmd.exe同目录下。

1. 通过wifi, 利用adb来连接手机。

在pc的cmd中输入命令:

adb connect 192.168.1.100

其中adb就是手机的ip. 如果连接成功, 就可以进入android的shell了。

2. 通过u *** , 利用adb来连接手机。

我把手机通过u *** 接上pc, 结果adb并没有连接上手机, 于是下载了android驱动程序, 安装了, 就好了。这样, adb就连接上了手机, 开心啊。于是就可以利用adb shell进入手机的android系统了

首先安装手机驱动,然后下载adb工具箱 命令提示符进入目录 adb shell


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12335036.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存