0

我有一个 android 应用程序,我们可以从中启动其他已安装的应用程序。这有一个后台服务,它在运行我的应用程序时始终执行。在某些设备上进行测试时,注意到在启动某些应用程序(如相机、画廊)时,服务有时会由于内存不足而停止(专辑)等...所以我尝试了

private boolean isRunningOutOfMemory(){
    MemoryInfo memoryInfo = new MemoryInfo();
    ActivityManager activityManager = (ActivityManager)getSystemService(Service.ACTIVITY_SERVICE);
    activityManager.getMemoryInfo(memoryInfo);
    final long appMemeory = Runtime.getRuntime().totalMemory();
    final long availableMemory = memoryInfo.availMem / 1048576L;
    final long memoryThreshold = ((memoryInfo.threshold * 2) + appMemeory) / 1048576L;
    return (availableMemory <= memoryThreshold);
}

如果条件为真,则显示一个对话框。此方法始终在后台运行。并且此条件有时无法成功。即如果可用内存大于阈值的两倍,则服务将在之前停止。

当没有启动其他应用程序(从我的应用程序启动)时,此可用内存会有所不同。即,正在运行的应用程序是我的。

可用内存出现这种变化的原因是什么?

是否可以找到服务停止的内存?

我怎样才能有效地处理这种情况?

提前致谢

4

1 回答 1

0

Android 系统可以在决定需要更多内存时终止任何进程。您可以添加提示(例如将服务标记为“前台”),但系统可以随时将其杀死。

您的后台服务不是唯一运行的后台服务。很可能,许多其他应用程序将服务设置为按预定时间间隔运行(希望使用 Android 警报而不是 wait() 循环......)以获取新数据。其他应用程序可能会设置广播接收器,这些接收器会在系统或 Google Cloud Messaging 发送意图时实例化和执行。

它是高度动态的。您的服务(和整个应用程序)需要准备好随时停止。将其标记为“前台”会增加其优先级,但您应该只在服务与用户已启动的某些内容相关时才这样做,例如播放歌曲或下载文件。

还有一件事——永远不要显示来自服务的对话框!这对用户来说非常不愉快,因为在他们使用任何其他应用程序时可能会发生这种情况。如果您需要通知用户有关服务中发生的事情,请发送通知。

于 2013-05-14T05:47:31.080 回答