android – 前台服务在华为被杀(GRA-UL00) – 已启用受保护的应用程序

前端之家收集整理的这篇文章主要介绍了android – 前台服务在华为被杀(GRA-UL00) – 已启用受保护的应用程序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的前台粘性服务在几个小时后被杀死而没有重新启动.我知道这已被问了几次,我已经阅读并验证了我设备上的所有检查.重要的是要注意,这似乎只发生在华为设备上.

因此,请允许我提供以下详细信息.

定期服务

public class PeriodicService extends Service {
      @Override
      public void onCreate() {
           super.onCreate();
           acquireWakeLock();
           foregroundify(); 
      }

      private void foregroundify() {
            // Omitted for brevity. Yes it does starts a foreground service with a notification
            // verified with adb shell dumpsys activity processes > tmp.txt
            // entry in tmp.txt => "Proc # 1: prcp  T/S/SF trm: 0 14790:my.app.package.indentifier/u0a172 (fg-service)" 
      }

      @Override
      public int onStartCommand(Intent intent,int flags,int startId) {
           acquireWakeLock();
           if (!isServiceRunningInForeground(this,this.getClass())){
              foregroundify(); 
           }

           PeriodicAlarmManager alarmManager = PeriodicAlarmManager.get(this);
           alarmManager.setAlarm();
           return START_STICKY;  // after a few hours,service terminates after this returns. verified in my local logs 
       }

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

       @Override
       public void onDestroy() {
            releaseWakeLock(); 
            stopForeground(true);
            super.onDestroy();
       }

    }

PeriodicAlarmManager

public void setAlarm() {
        Intent intent = new Intent(mContext,PeriodicAlarmReceiver.class);
        intent.setAction("repeat");
        mAlarmIntent = PendingIntent.getBroadcast(mContext,intent,0);
        mAlarmManager.cancel(mAlarmIntent);
        long triggerAtMillis = System.currentTimeMillis() + ALARM_INTERVAL_MINUTES;

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
            mAlarmManager.setExact(AlarmManager.RTC_WAKEUP,triggerAtMillis,mAlarmIntent);
        } else {
            mAlarmManager.set(AlarmManager.RTC_WAKEUP,mAlarmIntent);
        }

        ComponentName receiver = new ComponentName(mContext,PeriodicBootReceiver.class);
        PackageManager pm = mContext.getPackageManager();

        pm.setComponentEnabledSetting(receiver,PackageManager.COMPONENT_ENABLED_STATE_ENABLED,PackageManager.DONT_KILL_APP);
    }

PeriodicAlarmReceiver

public class PeriodicAlarmReceiver extends WakefulBroadcastReceiver {
    @Override
    public void onReceive(Context context,Intent intent) {
        Intent service = new Intent(context,PeriodicService.class);
        service.putExtra("source","PeriodicAlarmReceiver");
        intent.getAction()));
        startWakefulService(context,service);
    }
}

应用

public class MyApp extends Application {

        @Override
        public void onCreate() {
            super.onCreate();
        }

        @Override
        public void onLowMemory(){
            super.onLowMemory(); // never gets called
        }

        @Override
        public void onTrimMemory(int level){
            super.onTrimMemory(level); // only gets called on app launch
        }

        @Override
        public void onTerminate() {
            super.onTerminate();
        }
}

adb shell dumpsys活动进程> tmp.txt

输入tmp.txt => “Proc#1:prcp T / S / SF trm:0 14790:my.app.package.indentifier / u0a172(fg-service)”

以上条目基于已接受的答案:Foreground service being killed by Android

在设置中添加了MyApp到受保护的应用列表 – >高级设置 – >电池管理器 – >受保护的应用程序(允许应用在屏幕关闭后继续运行)

设置中使用的性能(最低设置) – >高级设置 – >电源计划(性能)

设备信息

型号:HUAWEI GRA-UL00

EMUI版本:EMUI 4.0.1

Android版本:6.0

其他说明:

低内存,onTrimMemory在终止之前不会被调用.在任何情况下,我都将应用程序剥离到最低限度只是为了让应用程序在后台运行,因此内存不应成为问题.

除非用户明确重新启动应用程序,否则粘性服务永远不会重新启动.

不会调用警报管理器来重新启动/重新创建服务. setExactAndAllowWhileIdle()也不起作用,并且应该是无关紧要的,因为服务是前台优先级服务,因此不应受打盹模式的影响.

服务只能在终止前最多12小时运行.发生这种情况时电池电量高于65%.

由于此应用程序适用于研究项目,因此必须使服务无限期运行.

还有什么我可以做的,或者这是一个特定的华为Android修改,开发人员无能为力.重申一下,此问题仅发生在华为设备上.

欣赏对此的任何其他见解!

解决方法

你绝对确定你需要唤醒锁吗?我有类似的服务,我注意到即使没有唤醒锁也能工作.这 post声称杀手是唤醒者. 我尝试过我的过程,过去几分钟就被杀死,现在已经运行了几个小时.

猜你在找的Android相关文章