`
xitong
  • 浏览: 6206711 次
文章分类
社区版块
存档分类
最新评论

android应用程序线程的监控

 
阅读更多

今天,一个朋友向我问起一个问题,说既然咱们是做性能的,我们就不能仅仅局限在服务器端,随着现在android手机硬件的发展,现在手机端的应用也随之强大起来,当然android手机并不是所以的硬件都是那么强大,另外测试人员都喜欢性能高端的手机进行测试,在一些低端的手机上都是简单测试,所以会导致一些潜在的问题,所以针对android应用程序的性能测试显得很有必要,既然她都提出来了,我又怎能推辞,既然作为群主就要为群里的每个成员负责。所以就开始研究起来,经过半天的模式总用有点启发,下面就简单介绍一个简单的线程监控:

DDMS是一款Google* 提供的应用,可作为独立的工具运行,也可通过ADT Eclipse* 插件集成到Eclipse* 中。它提供了强大的特性集合,能帮助您快速了解应用的运行状况。线程更新DDMS中的线程监控和评测浏览对于管理大量线程的应用很有用。要启用,点击 Update Threads(更新线程)图标即可开始。



一些性能指标都很清楚的现实在我们的面前了,当然仅仅到此根本无法找出问题,就是程序有问题纯正我们也看不出啊,因为我们对这些指标不明白是什么意思啊,下面就给一一介绍给大家:

Signal Catcher
Heap Worker
main thread
binder thread #1
binder thread #2
那这些线程都是用来做什么的呢?
我来给大家介绍一下android中的线程
在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专有
android.server.ServerThread
ActivityManager
ProcessStats
PackageManager
FileObserver
AccountManagerService
SyncHandlerThread
UEventObserver
PowerManagerService
AlarmManager
WindowManager
InputDeviceReader
WindowManagerPolicy
InputDispatcher
ConnectivityThread
WifiService
WifiWatchdogThread
LocationManagerService
AudioService
GpsEventThread
GpsNetworkThread
android.hardware.SensorManager$SensorThread
watchdog
Wallpaper
com.android.server.MountListener
9. misc
其他部分线程由java层的api提供,Thread等。


分享到:
评论

相关推荐

    Android应用程序输入事件处理机制

    在Android应用程序中,有一类...这个PPT讲Android应用程序输入事件的分发和处理过程,主要涉及到输入管理InputManager、输入事件监控线程InputReader、输入事件分发线程InputDispatcher,以及应用程序主线程消息循环。

    Android应用源码安卓源码(172个合集).zip

    Android应用源码安卓源码(172个合集),可以做为你的学习参考。 365MobileSecretary v1.0.6(365手机助手AIDL) 888个经典 Logo.rar AdXmpp(Openfire+asmack+spark) .zip AidlDemo(简单aidl的例子) aidl跨进程调用....

    Android高级编程--源代码

    3.1 Android应用程序的组成部分 43 3.2 程序清单简介 44 3.3 使用清单编辑器 47 3.4 Android应用程序生命周期 48 3.5 理解应用程序的优先级和进程状态 49 3.6 分离资源 50 3.6.1 创建资源 50 3.6.2 使用资源...

    《Android高级编程》

    1.9.3 Dalvik虚拟机 1.9.4 Android应用程序架构 1.9.5 Android库 1.9.6 高级Android库 1.10 小结 第2章 开始入手 2.1 Android开发 2.1.1 开始前的准备工作 2.1.2 创建第一个Android活动 2.1.3 Android应用程序的类型...

    Android高级编程.pdf

    1.4 自带的Android应用程序 1.5 Android SDK功能 1.5.1 对包括摄像头、GPS和加速计在内的硬件的访问 1.5.2 自带的Google地图、地理编码和基于位置的服务 1.5.3 后台服务 1.5.4 SQLite数据存储和检索数据库 1.5.5 ...

    精通ANDROID 3(中文版)1/2

    2.5 剖析Android应用程序的结构  2.6 分析Notepad应用程序  2.6.1 加载和运行Notepad应用程序  2.6.2 分解应用程序  2.7 了解应用程序生命周期  2.8 调试应用程序  2.8.1 启动模拟器  2.8.2 ...

    精通Android 3 (中文版)2/2

    2.5 剖析Android应用程序的结构  2.6 分析Notepad应用程序  2.6.1 加载和运行Notepad应用程序  2.6.2 分解应用程序  2.7 了解应用程序生命周期  2.8 调试应用程序  2.8.1 启动模拟器  2.8.2 ...

    matomo-sdk-android:适用于Android的SDK可通过Matomo评估您的应用。 适用于Android手机,平板电脑,Fire TV电视棒等!

    该库可帮助您将分析数据从Android应用发送到Matomo实例。 在v4之前,该库被称为Android的Piwik Tracking SDK。 特点: 缓存和离线支持优雅的重新连接处理仅限WIFI模式对多个跟踪器的线程安全支持支持自定义连接实现...

    AmazTimer:IntervalWorkout计时器应用程序,具有心律,大卡监控,tcx导出,重复次数检测和以前的锻炼查看器,适用于运行android的Amazfit设备

    该应用程序是amazfit设备的间隔/重复/锻炼计时器,用于进行HR / kcal监控和TCX导出的培训,默认值为tabata培训,但您可以随时使用所需的时间和设置 错误和建议 该应用程序正在持续开发中,我没有要测试的所有设备,...

    本科毕业--基于OpenWrt的视频监控WiFi遥控车的Android客户端源码.zip

    这对于开发需要高并发性能的应用程序(如服务器端应用、网络应用等)非常重要。 自动内存管理(垃圾回收): Java具有自动内存管理机制,通过垃圾回收器自动回收不再使用的对象,使得开发者不需要手动管理内存,...

    Android开发资料合集-World版!

    1.2、ANDROID应用程序架构 9 2、ANDROID应用程序结构 11 2.1、ACTIVITY 12 2.1.1、概述 12 2.1.2、Activity的生命周期 15 2.1.3、Activity 的创建 16 2.1.4、Activity 的跳转(含Bundle传值) 17 2.1.5.Actvity ...

    Android 开发技巧

    1.2、ANDROID应用程序架构 9 2、ANDROID应用程序结构 11 2.1、ACTIVITY 12 2.1.1、概述 12 2.1.2、Activity的生命周期 15 2.1.3、Activity 的创建 16 2.1.4、Activity 的跳转(含Bundle传值) 17 2.1.5.Actvity ...

    [Hasen图示系列]android中键盘消息处理机制

    分析InputManager 分发键盘消息给应用程序的过程 InputReader .pollOnce EventHub.g etEvent InputReader::pr ocessEventsLock ed InputReader::pr ocessEventsForD eviceLocked InputDevic e::process 没有键盘事件...

    DeviceMonitoring:DeviceMonitoring是概念性的全栈Web应用程序,它审核计算设备(例如ubuntu-desktop,android设备,mac计算机)中正在运行的进程

    DeviceMonitoring是概念性的全栈Web应用程序,它审核计算设备(例如ubuntu台式机,android设备,mac机)中正在运行的进程。 它分为四个部分: DeviceMonitor-演示部分,UI具有html,css,js代码 DeviceDaemon-在...

    基于CTP和Qt的可视化期货监控系统.zip

    Qt技术是一套强大的跨平台应用程序开发框架,专注于使用C++语言来构建高性能、高可维护性的软件解决方案。自1991年首次推出以来,Qt因其卓越的跨平台能力、丰富的功能集、高效的开发工具和良好的社区支持而广受...

    ANRWatch:监听ANR

    Android ANR 一、什么是ANR ANR全名Application Not Responding,也就是"应用无响应".当操作在一段时间内系统无法...Android应用程序的所有交互操作和响应,都是通过主线程的消息机制来进行的。例如当用户点击了某个But

    网络编程课程设计报告-Android-Socket-聊天室.doc

    (2)连接(Android 创建Socket会自动连接) (3)与服务器端进行通信 (4)关闭套接字 四、系统流程图 五、系统设计 本课程设计按照系统的具体功能要求,首先应用Socket编程创建客户端和服务器端, 每多个客户端服务器端...

    StrictModeUtils.java

    StrictMode在Android 2.3(API 9)的时候就已经引入了,虽然到当前这个工具年代比较久远 了,但属实还是非常好用的, 在开发阶段使用这个工具,能够很好的帮助发现开发中的一系列不规范的编码, 例如主线程访问网络...

    Matrix:插件式,微信开发的非侵入式APM系统-开源

    其中包括以下两个插件,WCCrashBlockMonitorPlugin,它基于KSCrash框架,具有崩溃捕获的尖端滞后堆栈捕获能力,以及WCMemoryStatPlugin ,这是一种性能优化的内存不足监控工具,可捕获内存分配和应用程序内存不足...

    sysmon:适用于Linux的BS模式系统监视器(演示http:199.247.1.240:2048)

    除浏览器外,我们还为许多系统(例如android / ios / windows / linux / mac os)提供客户端应用程序。 产品特点: 一页查看CPU,内存,磁盘,网络使用情况 支持单CPU使用率实时显示 支持详细的内存分类显示 支持...

Global site tag (gtag.js) - Google Analytics