Android 清除最近的应用程序擦除应用程序内存,我的接收器停止工作

Android 清除最近的应用程序擦除应用程序内存,我的接收器停止工作,android,service,google-cloud-messaging,broadcastreceiver,taskmanager,Android,Service,Google Cloud Messaging,Broadcastreceiver,Taskmanager,MyApp的接收器在后台正常工作,如下所示: public class MySmsReceiver extends WakefulBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { System.out.println("triggered sms"); if(intent.getAction().equals(Tele

MyApp的接收器在后台正常工作,如下所示:

    public class MySmsReceiver extends WakefulBroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        System.out.println("triggered sms");
        if(intent.getAction().equals(Telephony.Sms.Intents.SMS_RECEIVED_ACTION)) {
          Toast.makeText(context, "message Received", Toast.LENGHT_SHORT).show();
    }
}
我给接收者的清单文件是

        <receiver android:name=".MySmsReceiver">
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />

        </intent-filter>
    </receiver>

我发现一些应用程序,比如watsapp和fb,总是被保存在内存中,我说这个bcoz在清除最近的应用程序之后,任务管理器仍然有如下状态

如何在我的应用程序中执行此操作。。是什么让我的应用程序表现得像其他第三方应用程序,如watspp和facebook…我如何让我的应用程序始终保留在内存中?我一直在问这个问题,那么只有我的接收器才能始终工作。。如果我错了,那就给我一个解决办法


我一直在寻找这个很多,但我仍然找不到解决方案。。。我问错了吗?还是真的有办法做到这一点?请有人帮帮我。。。这让我有一周的时间!!!希望我在这里解释了我的问题,如果我没有问我,我会立即给你答复。

如果“强制停止”按钮被禁用,这意味着在概览中刷走应用程序会导致你的应用程序在此设备上被强制停止。在用户再次与您的应用程序交互之前,您将不会收到任何广播。

这种情况似乎发生在少数设备上(例如:小米、荣誉设备、具有SmartManager功能的三星设备等),当用户从最近的任务中删除应用程序时,应用程序会强制停止

这是因为这些制造商在默认情况下添加了任务管理器功能,强制停止应用程序进行内存/电池管理。但像Whatsapp、Facebook这样的应用程序很少有效。这可能是因为他们会将最著名的应用程序列入白名单。

根据Android开发者文档/UX建议,这是该场景可能的解决方案

基于小米MIUI的设备案例:

创建用户体验以与用户通信,以启用应用程序的“自动启动”权限。基本上,用户必须打开“安全”应用程序->单击“权限”->单击“自动启动”->查找并启用您的应用程序。我知道这是荒谬和痛苦的,但没有其他直截了当的选择

检查制造商是否为小米后执行上述操作

String manufacturer = "xiaomi";
        if(manufacturer.equalsIgnoreCase(android.os.Build.MANUFACTURER)) {
            //this will open auto start screen where user can enable permission for your app
            Intent intent = new Intent();
            intent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity"));
            startActivity(intent);
        }
注意:对于荣誉设备、三星设备,此程序可能会有所不同,因为它非常特定于制造商

对于其他设备来说,解决这个问题的一个正常方法是使用覆盖
onTaskRemoved
方法创建一个粘性服务。
使用以下代码:

public class BackgroundService extends Service {

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

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

    @Override
    public void onTaskRemoved(Intent rootIntent) {
        //create a intent that you want to start again..
        Intent intent = new Intent(getApplicationContext(), BackgroundService.class);
        PendingIntent pendingIntent = PendingIntent.getService(this, 1, intent, PendingIntent.FLAG_ONE_SHOT);
        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        alarmManager.set(AlarmManager.RTC_WAKEUP, SystemClock.elapsedRealtime() + 5000, pendingIntent);
        super.onTaskRemoved(rootIntent);
    }
}
在这里,服务将在5秒后再次启动。在清除最近的应用程序后,您可以将其替换为任何想要重新启动的应用程序。

在一些华为设备(以及一些LG和小米设备)上,您需要将您的应用程序添加到允许在后台运行的应用程序列表中。如果您不这样做,一旦您的应用程序停止(通过从最近的任务列表中刷卡,或通过Android出于资源原因关闭应用程序),它将不会自动重新启动

在华为设备上,该设置称为“受保护的应用程序”。您不能以编程方式将应用添加到“受保护的应用”列表中。你需要告诉用户,他必须在你安装了你的应用程序后进行操作。知名应用程序(如Whatsapp、Facebook、Google Mail)由制造商自动添加

这种行为在不同的设备上可能不同,在不同版本的Android上也可能不同,如果设备为特定的移动运营商“打上品牌”,则可能不同,因为移动运营商也可以自行修改设置

有关更多详细信息,请参阅

编辑:添加此项:

此外,Android打破了Android 4.4(Kitkat)中的“从最近的应用程序刷卡”行为,因此它会给被刷卡的应用程序带来问题。粘性服务不会被重新启动,广播
Intent
s不会被交付。这里有一些关于解决方法的信息:


另外,您是否从谷歌Play商店安装了应用程序?从Play store安装的应用程序与本地安装的应用程序(从下载或通过
adb
或其他方式)的行为可能不同。

您在哪个设备上测试?当从最近的应用列表中清除时,某些设备强制停止应用程序,但某些流行应用程序除外。请在emulator和其他一些设备上尝试。不久前,我在Stackoverflow上遇到一个线程,出现了相同的问题。我正在搜索它,所以我会指给你看。你可能想检查一下这里给出的解决方案,看看它是否有用。这提供了一些方法,您的应用程序可能还需要使用这些方法来降低接收器停止工作的可能性,例如从
onStartCommand()
@Mr.Popular返回
START\u STICKY
,您可能需要检查并使用START\u STICKY来保持它继续工作,但是,如果该设备实际强制关闭应用程序的方式与按下屏幕上的按钮相同,则在用户与它交互之前,它不会再次启动应用程序。FB和whatsapp可能会像其他人提到的那样得到特殊待遇,但watsapp并没有被阻止。。。如果你说它有一些特殊的权限,那么我如何才能让我的应用程序获得这些权限呢???我想,添加到该制造商的任何特殊应用程序列表中。但实际上,可以在三星的远程测试实验室进行测试,看看他们做了什么,并确定您是否可以在某些设备上容忍这种行为,并在必要时向用户发出警告消息。如果应用程序未特别强制停止,有一些方法可以让它继续运行,就像已经发布的一些链接中提到的那样。有一些方法可以让它继续运行,就像已经发布的一些链接中提到的>>如果你有任何帖子可以像我说的那样给bhavior,那么告诉我你有任何文档可以确保你的>>被添加到任何特殊应用程序列表中制造商,我猜谢谢,伙计,如果它解决了我的公关问题,我正在努力