【问题标题】:My app closes because of device low memory我的应用程序因设备内存不足而关闭
【发布时间】:2014-07-03 07:10:05
【问题描述】:

我正在开发一个使用意图服务来备份一些文件的应用程序。该应用程序运行良好,不会崩溃。但是,当我在后台启动应用程序时,应用程序有时会在运行两天或有时只运行一晚时关闭。

是因为该设备内存不足而我的应用程序无法正确关闭吗?

是否有任何意图,即我在我的应用程序中处理这种情况,我会向我的用户展示最后一个进程停止的原因。

【问题讨论】:

  • Intent 表示崩溃,但你应该在一些日志文件中捕获崩溃并仔细检查你的崩溃日志。

标签: android android-intent backup android-intentservice


【解决方案1】:

是的。您的问题确实是由于设备内存不足。

当资源不足时,Android 会简单地处理正在运行的服务,例如您的服务。

接下来会发生什么取决于你

声明为粘性

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    return START_STICKY;
}

将上述内容添加到您的服务将强制 Android 杀死后重新启动它,一旦资源 再上去。

如果正在运行的服务对您的系统至关重要,并且您不希望它在任何情况下自动终止 情况(提示:大多数时候这不是你想要的),你可以通过声明来做到这一点 它是一个前台服务

Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendIntent = PendingIntent.getActivity(this, 0, intent, 0);

NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setTicker("ticker text").setContentTitle("title text").setContentText("content")
            .setWhen(System.currentTimeMillis()).setAutoCancel(false)
            .setOngoing(true).setPriority(Notification.PRIORITY_HIGH)
            .setContentIntent(pendIntent);
Notification notif = builder.build();
notif.flags |= Notification.FLAG_NO_CLEAR;
startForeground(NOTIF_ID, notif);



最后说明:IntentService 仅生成一个线程,所有请求都在该线程上执行。 这在许多情况下都可以正常工作。但是,当涉及到 IO-bound 执行时,您通常会得到 使用多个线程获得更好的性能。

所以,只有当性能是一个问题时,才考虑使用例如作业的多线程池:

ThreadFactory threadFactory = Executors.defaultThreadFactory();
ThreadPoolExecutor executorPool = new ThreadPoolExecutor(
      MIN_NUM_THREADS, MAX_NUM_THREADS, 10, TimeUnit.SECONDS, ...);

...
executorPool.execute(new MyWorkerThread(params));

ThreadPoolExecutor 构造函数接收的前两个参数设置最小值和最大值 并发活动线程数。

【讨论】:

    【解决方案2】:

    您可以使用这些来测量内存。

    Gdx.app.getJavaHeap();
    Gdx.app.getNativeHeap();
    

    由于您的应用程序在后台运行,也许您可​​以保存这些值以供以后研究?

    【讨论】:

    • 你的意思是说我只是得到堆大小并提到一些验证,如果设备堆低然后停止它进程。这是你处理错误的方法吗??
    • 我的意思是,启动您的应用程序并监控内存量。如果它是稳定的,你就会知道它没有因为内存不足而关闭。
    猜你喜欢
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 2016-03-18
    相关资源
    最近更新 更多