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等。


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
设计思路: Android流量监控软件需要实时地监控网络流量的使用情况,因此需要在后台持续地监听网络流量的变化。为了保证软件的实时性和准确性,我们可以采用以下设计思路: 1. 获取网络流量信息:使用Android系统提供的TrafficStats类,可以获取手机当前的网络流量信息,包括总的流量和应用程序的流量。 2. 后台监控:通过Service组件,可以在后台持续地监听网络流量的变化,实时更新流量数据。 3. 显示流量信息:通过使用Android的Notification和Widget组件,可以将实时的流量信息以通知和小部件的形式展现在用户的桌面上,方便用户随时了解当前的流量使用情况。 实现步骤: 1. 创建一个Service组件,用于后台监听网络流量的变化,并实时更新流量数据。 2. 在Service组件中,使用TrafficStats类获取当前的网络流量信息,并将其保存到SharedPreferences中。 3. 使用Handler和Timer组件,定时从SharedPreferences中读取流量信息,并更新通知和小部件中的流量数据。 4. 使用Android的Notification和Widget组件,创建通知和小部件,展示实时的流量信息。 5. 在设置界面中,提供用户自定义流量使用情况的功能,例如设置流量警告值、流量限制值等。 6. 在应用程序中,提供流量使用记录的功能,可以查看每个应用程序的流量使用情况。 注意事项: 1. 由于Android系统的限制,无法获取其他应用程序的网络流量信息,因此只能获取本应用程序的流量信息。 2. 在后台监听网络流量的变化,需要使用WakeLock保持设备唤醒状态,确保Service组件可以持续工作。 3. 在更新通知和小部件中的流量数据时,需要考虑线程安全的问题,避免多线程竞争导致数据不一致的情况。 4. 在使用Notification和Widget组件时,需要注意用户的隐私保护,避免泄露用户的个人信息。 以上是Android流量监控软件的设计和实现思路,具体的代码实现可以参考相关的开源项目和文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值