【问题标题】:android binders安卓活页夹
【发布时间】:2013-01-08 04:08:09
【问题描述】:

应用程序有大约 100 个本地绑定器实例是否正常?这个数字攀升到那个高位,并且永远不会下降到最初的水平。拥有这么多活页夹的场景是什么?

【问题讨论】:

    标签: android performance android-binder


    【解决方案1】:

    (重写为作者询问使用adb shell dumpsys meminfo 列出的本地活页夹的数量)。我无法回答这是否正常的问题,因为我以前从未发现过该命令!

    但这里有一些关于可能导致它的场景的信息。

    本地绑定器是 Android 'Binder' 内核 IPC 驱动程序认为可以接收来自另一个进程的函数调用的任何对象。

    这些事情可能包括:

    • 您在代码中声明的任何从IBinder 派生的对象。当你声明一个 Android 服务时,总会有这样的对象。当您使用其他人的服务时,您通常还会创建此类对象(作为侦听器)。
    • Android 框架内的等效 Java IBinder 派生对象。在某些情况下,这可能很明显,例如当您为某些系统服务提供某种侦听器时。但其他 Android 框架类也经常涉及到 Binder。例如,我有一种感觉,Android Bitmap 在它的某处包含一个IBinder,以便安排不同的进程共享位图数据而不需要复制它。不过,我不确定。
    • C++ 中的部分 Android 框架也是 Binder。例如,我认为每个 Android 应用程序进程都有一个连接到名为 ISurfaceComposer 的图形合成引擎(surface flinger)。

    所以,要弄清楚为什么会有这么多 Binder,请考虑以下几点:

    • 您是否希望收到来自其他进程的任何系统事件的通知?例如广播接收器,或您传递给系统服务的任何类型的侦听器等。
    • 您自己使用Services 和AIDL 吗?
    • 您是否将复杂的 Android 框架类传递给系统 API?

    我的直觉是 100 是不寻常的;实际上可能没什么担心,但我仍然很想知道你是否找出原因。

    【讨论】:

    • 增加活页夹线程的数量当然是可疑的,但这不是我要问的。我对“adb shell dumpsys meminfo AppProcessName”观察到的 binder 实例的数量感兴趣
    猜你喜欢
    • 1970-01-01
    • 2011-10-04
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多