我试图了解启动应用程序时所有线程的运行情况。 我在Android Studio中创建了一个简单的应用程序,没有添加额外的代码行,它只是android studio创建的一个简单的Hello World应用程序。
当我为我的应用程序UID运行 adb shell ps 和grep时,我看到以下输出:
C:\ Users> adb shell ps -t | findstr u0_a110
u0_a110 3596 655 1593724 66480 SyS_epoll_ 0000000000 S com.example.rhbj36.myapplication
u0_a110 3601 3596 1593724 66480 futex_wait 0000000000 S Jit线程池
u0_a110 3602 3596 1593724 66480 do_sigtime 0000000000 S Signal Catcher
u0_a110 3603 3596 1593724 66480 poll_sched 0000000000 S JDWP
u0_a110 3604 3596 1593724 66480 futex_wait 0000000000 S ReferenceQueueD
u0_a110 3605 3596 1593724 66480 futex_wait 0000000000 S FinalizerDaemon
u0_a110 3606 3596 1593724 66480 futex_wait 0000000000 S FinalizerWatchd
u0_a110 3607 3596 1593724 66480 futex_wait 0000000000 S HeapTaskDaemon
u0_a110 3608 3596 1593724 66480 binder_thr 0000000000 S Binder:3596_1
u0_a110 3609 3596 1593724 66480 binder_thr 0000000000 S Binder:3596_2
u0_a110 3610 3596 1593724 66480 futex_wait 0000000000 S Profile Saver
u0_a110 3612 3596 1593724 66480 SyS_epoll_ 0000000000 S RenderThread
u0_a110 3613 3596 1593724 66480 binder_thr 0000000000 S Binder:3596_3
u0_a110 3614 3596 1593724 66480 futex_wait 0000000000 S hwuiTask1
有人可以帮助理解这些'Binder:3596_1,2,3'线程是什么?以及为什么要创造它们? 对其他线程的解释也会有所帮助。
答案 0 :(得分:0)
Android应用与其他操作系统中的应用不同。您没有main
入口点(或等效点)。您的应用程序由系统按需启动和停止,由少量来源(例如Intent
)触发。尽管您可能只编写了一个简单的Hello World类型应用程序,但框架中仍有很多内容可以启动您的应用程序并在屏幕上显示。
您的应用程序的主(UI)线程是执行各种回调的地方(例如您的Activity的onCreate
。)这完全由使用Android的IPC机制Binder的框架驱动。因此,框架会自动创建您注意到的Binder线程来处理不同的请求。其中一些是由生命周期回调(由系统控制)等事件触发的,其他一些可用于处理您自己的自定义Service
API等.Binder会自动设置一个线程池来处理传入的请求。
系统类似地使用其他线程来处理不同的事情,例如:
您通常不需要关心这些线程,因为它们完全由系统管理,并且它们的使用将根据您的应用程序执行的Android版本而有所不同。
有关Android应用进程和线程的详细信息,请参阅: https://developer.android.com/guide/components/processes-and-threads.html