Binder_thr在我的应用程序中创建

时间:2018-01-02 16:20:22

标签: android multithreading android-binder

我试图了解启动应用程序时所有线程的运行情况。 我在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'线程是什么?以及为什么要创造它们? 对其他线程的解释也会有所帮助。

1 个答案:

答案 0 :(得分:0)

Android应用与其他操作系统中的应用不同。您没有main入口点(或等效点)。您的应用程序由系统按需启动和停止,由少量来源(例如Intent)触发。尽管您可能只编写了一个简单的Hello World类型应用程序,但框架中仍有很多内容可以启动您的应用程序并在屏幕上显示。

您的应用程序的主(UI)线程是执行各种回调的地方(例如您的Activity的onCreate。)这完全由使用Android的IPC机制Binder的框架驱动。因此,框架会自动创建您注意到的Binder线程来处理不同的请求。其中一些是由生命周期回调(由系统控制)等事件触发的,其他一些可用于处理您自己的自定义Service API等.Binder会自动设置一个线程池来处理传入的请求。

系统类似地使用其他线程来处理不同的事情,例如:

  • hwuiTask1:用于图形/ UI卸载
  • RenderThread:用于通过HW composer呈现应用程序的UI组件
  • JDWP:Java调试线程,用于附加调试器
  • 个人资料保护程序:用于应用程序分析

您通常不需要关心这些线程,因为它们完全由系统管理,并且它们的使用将根据您的应用程序执行的Android版本而有所不同。

有关Android应用进程和线程的详细信息,请参阅: https://developer.android.com/guide/components/processes-and-threads.html