用Eclipse DDMS可以看到下面的线程:
Signal Catcher
Heap Worker
main thread
binder thread #1
binder thread #2
那这些线程都是用来做什么的呢?
在Android系统中,Java层和c++/c层都可以创建线程。不过Java层创建的线程最终都由c++/c层来实现。使用ddms这个工具可以查看虚拟机实例进程(除zygote本身和由native code创建的进程,比如vold外)所包含的线程大致信息。比如线程名字,id号,状态,user time和system time等。
大家可以看到一般一个虚拟机实例进程都包含有如下7个通用的线程,下面大致讲一下这些线程的作用和创建流程。
1. main
这个就是主线程了。具体流程待细述。
2. HeapWorker
一个异步的工作线程,处理那些需要在单独线程里面做的避免同步问题的堆 *** 作。其源代码在dalvik/vm/alloc/HeapWorker.*部分。
3. Signal Catcher
这个线程是用来捕获linux信号和做一些后续处理的。比如说,当一个SIGQUIT (Ctrl-\)信号到达后,这个线程就会挂起虚拟机,并且将所有线程的状态信息输出到log。其源代码在dalvik/vm/SignalCatcher.*部分。
4. JDWP
这个线程是用来实现Java Debug Wire Protocol的。如果命令行调试器的参数为"suspend=y",这样会暂停虚拟机。这个估计和eclipse的调试和ddms等调试工具相关。其源代码在dalvik/vm/jdwp/*部分。
5. Stdio Converter
这个线程从标准输出和标准错误输出读取信息并将它们转换为log信息。其源代码在dalvik/vm/StdioConverter.*部分。
6. Compiler
Android's Jit独立于目标平台的部分。其源代码在dalvik/vm/compiler/Compiler.*和dalvik/vm/interp/Jit.*等部分。
7. Binder Thread #%d
使用binder进行通讯时用到的线程。其源代码在frameworks/base/libs/binder/*等部分。
以下的线程属于system_server和应用程序专有线程,视具体应用的需求而定。
8. system_server专有
DDMS 的全称是Dalvik Debug Monitor Service,它为我们提供例如:为测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、接收SMS、虚拟地理坐标等等。如何启动 DDMS
DDMS 工具存放在SDK – tools/路径下,启动DDMS方法如下:
直接双击ddms.bat运行;
在Eclipes调试程序的过程中启动DDMS,在Eclipes中的界面如下:
Eclipes-DDMS
选择“Other”,界面如下:
Open-Perspective
双击DDMS就可以启动了。
DDMS对Emulator和外接测试机有同等效用。如果系统检测到它们(VM)同时运行,那么DDMS将会默认指向 Emulator。以上2种启动后的 *** 作有些不一样,建议分别尝试下。
DDMS 的工作原理
DDMS将搭建起IDE与测试终端(Emulator 或者connected device)的链接,它们应用各自独立的端口监听调试器的信息,DDMS可以实时监测到测试终端的连接情况。当有新的测试终端连接后,DDMS将捕捉到终端的ID,并通过adb建立调试器,从而实现发送指令到测试终端的目的。
DDMS-Device
DDMS监听第一个终端App进程的端口为8600,APP进程将分配8601,如果有更多终端或者更多APP进程将按照这个顺序依次类推。DDMS通过8700端口(”base port”)接收所有终端的指令。
下边通过GUI详细了解DDMS的一些功能
Devices
在GUI的左上角可以看到标签为”Devices”的面板,这里可以查看到所有与DDMS连 接的终端的详细信息,以及每个终端正在运行的APP进程,每个进程最右边相对应的是与调试器链接的端口。因为Android是基于Linux内核开发的 *** 作平台,同时也保留了Linux中特有的进程ID,它介于进程名和端口号之间。
DDMS-Device
在面板的右上角有一排很重要的按键他们分别是Debug the selected process调试所选进程、Update Threads刷新线程、Update Heap刷新堆栈、Stop Process停止进程和ScreenShot截屏。
Emulator Control
通过这个面板的一些功能可以非常容易的使测试终端模拟真实手机所具备的一些交互功能,比如:接听电话,根据选项模拟各种不同网络情况,模拟接受SMS消息和发送虚拟地址坐标用于测试GPS功能等。
DDMS-Control
Telephony Status: 通过选项模拟语音质量以及信号连接模式。
Telephony Actions: 模拟电话接听和发送SMS到测试终端。
Location Control: 模拟地理坐标或者模拟动态的路线坐标变化并显示预设的地理标识,可以通过以下3种方式:
Manual: 手动为终端发送二维经纬坐标。
GPX: 通过GPX文件导入序列动态变化地理坐标,从而模拟行进中GPS变化的数值。
KML: 通过KML文件导入独特的地理标识,并以动态形式根据变化的地理坐标显示在测试终端。
Threads、Heap、File Exporler
DDMS-THF
这几项,我们在其他开发工具中也经常使用,就在不此详细说明了。通过File Exporler可以查看Android模拟器中的文件,可以很方便的导入/出文件。
Locate、Console
DDMS-LC
Locate:显示输出的调试信息。
Console:是Android模拟器输出的信息,加载程序等信息;
使用DDMS模拟发送短信, *** 作过程如下:
在Emulator Control\Telephony Actions 中输入以下内容
DDMS-SMS
单击发送后,在Android模拟器中打开Messaging,看到下面的短信:
DDMS-Message
单击新短信,详细查看短信内容:
AVD-Message
中文显示为乱码,在未来的开发中,我们必须要注意中文字符的问题。
这个要详细讲篇幅太大,因为DDMS里面内容比较多
复制一段话;
DDMS
的全称是Dalvik
Debug
Monitor
Service,它为我们提供例如:为测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、手机SMS、虚拟地理坐标等等。
说下简单的:
点击?旁边的机器人
打开DDMS
左边是模拟器或者你的手机,以及一些正在运行的程序
右边就是各种提供的功能:什么文件浏览
什么网络
什么堆栈信息等,具体每个用法麻烦自己百度
讲下最常用的:
1、上图左边模拟器部分,右上角有个下拉箭头
可以重启DDMS连接调试,如果我们的端口被例如酷狗
360一类占用了
我们看不到我们的模拟器
或者手机时
需要先结束掉酷狗
360的adb程序,然后此处重启adb
2、第二张图里的
查看数据库
还有shareprences
保存的输
数据库
data----data----你的应用包名---database
sp
在
shared_prefs下
其他的自己看吧
打字截图累死人
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)