LocalBroadcastManager,android:process =":ProcessName",使用过多的ram

时间:2015-10-03 02:25:11

标签: android memory memory-management process hardware-acceleration

好吧,我会一次尝试解释一个问题,这样你就可以理解我遇到的问题,希望有人能告诉我锄头修理它。所以我的应用程序运行完美,但我的用户一直在抱怨使用高RAM,平均而言,它运行在任何从120mb到200mb IDLE的地方,我同意这是对的,所以我继续想起我在之前的项目中使用过的技巧这就是这行代码android:hardwareAccelerated =" false"。这样每次活动移除大约10mb的ram,但我仍然使用大约90mb的使用率,所以我去看了一下,发现这个android:process =":ProcessName">这使我的应用程序从使用100mb到仅仅8mb的内存。但是我在这样做时遇到了一个问题,那就是我在一个服务活动中有一个LocalBroadcastManager,它将数据发送到我的MainActivity,当这两个有不同的进程时,他们不会相互通信,如果我将它们组合到同一个进程中,那么使用率就会再次上升。所以我有点不知道该做什么,我拒绝使用Android内存调试器,因为它并没有告诉我关于我的代码出错的问题。从字面上看,我的MainActivity内部有5个文本视图和一个imageview,所以我知道它不是那么密集!如果有人需要代码,请告诉我,但我认为有人真的不需要查看代码来回答这个问题!

1 个答案:

答案 0 :(得分:0)

您写道:

  

但是这样做时我遇到了一个问题,那就是我在一个服务活动中有一个LocalBroadcastManager,它将数据发送到我的MainActivity,当这两个进程有不同的进程时,它们就不会相互通信,如果我将它们组合到同一个进程中,则再次使用它们。

您可以将服务保存在一个单独的流程中,并通过IPC,进程间通信从应用程序的第一个流程绑定到它。

请参阅:

http://developer.android.com/guide/components/bound-services.html

有多种方法可以进行IPC。 Messenger选项对您来说可能是一个很好的起点:

http://developer.android.com/guide/components/bound-services.html#Messenger

来自文档:

  

如果您需要服务与远程进程通信,则可以使用Messenger为您的服务提供界面。此技术允许您执行进程间通信(IPC),而无需使用AIDL。