gpt4 book ai didi

android - Android无法杀死的进程?

转载 作者:太空狗 更新时间:2023-10-29 14:07:38 25 4
gpt4 key购买 nike

我一直在想,如果没有可见的 UI 组件,是否有一种方法可以防止应用程序进程被 Android 杀死。

例如,有一个执行某些重要工作的Service。开发人员不想通过startForeground 显示任何通知,因此,根据http://developer.android.com/guide/components/processes-and-threads.html,进程将具有服务进程 级别。 .因此,如果系统内存压力很大,那么 android 很有可能会停止服务。

我脑子里有一个疯狂的想法。根据该页面,如果

,该进程将具有 前台进程级别

It hosts a BroadcastReceiver that's executing its onReceive() method.

如果开发人员启动一个单独的进程,其中包含一个 onReceive() 永不停止的服务和广播接收器?

代码如下所示。例如,开发人员有一个 IntentService 和一个在单独进程上工作的 BroadcastReceiver:

<service
android:name=".MyService"
android:process=":myprocess">
</service>
<receiver
android:name=".MyReceiver"
android:process=":myprocess">
<intent-filter>
<action android:name="MY_ACTION" />
</intent-filter>
</receiver>

BroadcastReceiver 看起来是这样的:

public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// block main thread
try {
Thread.sleep(5000);
} catch (InterruptedException e) {}
// run this receiver again
Intent intent = new Intent();
intent.setAction(MY_ACTION);
context.sendBroadcast(intent);
}
}

所以,这里发生的是,开发人员阻止了 onReceive 方法,以便该进程保持在前台。线程休眠 5 秒,因为 10 秒延迟会导致 ANR(根据 http://developer.android.com/reference/android/content/BroadcastReceiver.html )。据我了解,在这里阻止 UI 线程没有危险,因为接收器在一个单独的进程上工作。然后接收器向自己发送一个新的广播,这个过程永远不会停止,直到开发人员在运行时通过 PackageManager 禁用接收器。

与此同时,开发人员通过 startService 调用与他的 IntentService 进行交互。 IntentService 在后台线程上工作,因此它不会受到 MyReceiver 的影响。

那么,这是否会阻止进程和服务在内存不足时被 Android 杀死?当然,我不会在我的应用程序中实现它,但我很好奇它是否可行。

最佳答案

onReceive() 中使用 Thread.sleep() 也会让您出现 ANR。 onReceive() 必须在 10 秒内返回,否则您的进程将出现 ANR 并被终止。

有两种方法可以确保您的进程不会被杀死:

首先是您提到的 startForeground()。这会附带一条通知,除非您修改 AOSP,否则您无法隐藏该通知。

第二种方法仅适用于构建固件。您可以在 AndroidManifest.xml

中添加一个 android:persistant="true" 属性

对于常规应用,最好的方法是使用 START_STICKY 来显着降低被杀死的几率,并让 Android 在被杀死时自动重启您的服务。为确保它再次启动,您可以使用 AlarmManager。

关于android - Android无法杀死的进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31686257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com