0

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

4

1 回答 1

2

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

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

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

这些事情可能包括:

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

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

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

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

于 2013-01-11T10:35:45.843 回答