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

Mr.*_*lar 25 service android taskmanager broadcastreceiver google-cloud-messaging

如果在背景中,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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的接收器清单文件是

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

        </intent-filter>
    </receiver>
Run Code Online (Sandbox Code Playgroud)

文件说,如果我在清单文件中声明一个接收器,它应该始终有效.但就我而言,它不是......

但每当我通过刷它清除我最近的应用程序时它就停止了工作.在我去任务管理员后看到MyApps强制停止如下所示 taskmanager中我的应用程序的屏幕截图

我想出了一些应用程序,如watsapp和fb总是留在内存中说这个bcoz刷完清楚的最近的应用程序仍然任务管理器有如下所示的跟随状态

任务管理器中的fb状态

任务管理员中的watsapp状态

我怎么能在我的应用程序中执行此操作..什么会使我的应用程序像其他第三方应用程序,如watspp和Facebook ...我怎么能让我的应用程序在内存中总是我问这个然后只有我的接收器将始终工作..如果我错了,请给我一个解决方案来做到这一点......

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

Dav*_*ser 19

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

在华为设备上,该设置称为"受保护的应用程序".您无法以编程方式将您的应用添加到"受保护的应用"列表中.您需要在安装应用程序后告诉用户他必须这样做.制造商会自动添加知名应用程序(如Whatsapp,Facebook,Google Mail).

这种行为在不同的设备上可能会有所不同,并且在不同版本的Android上可能会有所不同,如果设备是针对特定移动运营商的"品牌",则可能会有所不同,因为移动运营商也可以自行修改设置.

请参阅华为手机上的"受保护的应用程序"设置,以及如何处理它以获取更多详细信息.

编辑:添加:

此外,Android打破了Android 4.4(Kitkat)中的"轻松刷新"行为,因此它会导致刷卡的应用程序出现问题.粘性服务不会被重新启动,并且Intent不会传送广播.这里有一些关于解决这个问题的解决方法的信息:在android 4.4中,从最近的任务中刷出应用程序会永久性地杀死应用程序及其服务.知道为什么吗?

此外,您是否已从Google Play商店安装了应用?对于已从Play商店安装的应用程序与本地安装的应用程序(来自下载或通过adb或其他)的行为可能不同.


Gov*_*ind 16

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

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

根据Android Developer文档/ UX建议,这个场景的可能解决方法,

Case Xiaomi MIUI基于设备:

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

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

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);
        }
Run Code Online (Sandbox Code Playgroud)

注意:此程序可能与Honor设备不同,三星设备非常特定于制造商.

另外,作为解决其他设备的常用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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这里服务将在5秒后重新开始.您可以将其替换为从最近的应用程序中清除后要再次启动的任何意图.

  • @PhanVanLinh onTaskRemoved将不适用于制造商正在使用独占任务管理器的设备.(例如:小米,荣誉等).检查答案的第一部分,我已经为小米设备指定了一些非常具体的内容,这可能对您有所帮助. (2认同)

归档时间:

查看次数:

7253 次

最近记录:

9 年,1 月 前