2015-12-28 4 views
3

Я боролся с этим в течение 2 недель.Android убивает мою переднюю службу после того, как Force остановил мой пакет

Я разрабатываю приложение, которое контролирует продолжительность вызова.

Я получаю traodcast, где я запускаю службу переднего плана, чтобы повесить трубку.

, но после пяти минут или более усилий андроида остановить мой пакет, а затем убивает мой процесс, из-за которого служба рушится. Я думаю - (не знаю почему) без аварийного сообщения или какой-либо ошибки.

он просто исчезает.

И он перезапускается, но никогда не запускает сервис снова.

вот LogCat

12-29 00:28:52.857 619-619/? I/ActivityManager: Force stopping package club.androidy.callcontrolfree appid=10006 user=0 
12-29 00:28:52.858 619-619/? I/ActivityManager: Killing proc 433:club.androidy.callcontrolfree/u0a10006: force stop club.androidy.callcontrolfree 
12-29 00:28:52.894 619-619/? W/ActivityManager: Scheduling restart of crashed service club.androidy.callcontrolfree/.PhoneCallService in 5000ms 
12-29 00:28:52.919 619-619/? I/ActivityManager: Force stopping service ServiceRecord{422b1b18 u0 club.androidy.callcontrolfree/.PhoneCallService} 

с помощью adb shell dumpsys я получил это, который гарантирует, что моя служба переднего плана службы с правом приоритета

*APP* UID 10088 ProcessRecord{41aefb98 27922:club.androidy.callcontrolfree/u0a10088} 

user #0 uid=10088 

class=club.androidy.callcontrolfree.AnalyticsApplication 

dir=/data/app/club.androidy.callcontrolfree-1.apk publicDir=/data/app/club.androidy.callcontrolfree-1.apk data=/data/data/club.androidy.callcontrolfree 

packageList=[club.androidy.callcontrolfree] 

compat={240dpi} 

[email protected] 

pid=27922 starting=false lastPss=0 

lastActivityTime=-11s768ms lruWeight=14097791 serviceb=false keeping=true hidden=false empty=true 

oom: max=15 hidden=9 client=9 empty=15 curRaw=2 setRaw=2 nonStopping=2 cur=2 set=2 

curSchedGroup=-1 setSchedGroup=-1 systemNoUi=false trimMemoryLevel=0 

adjSeq=63108 lruSeq=10968 

setIsForeground=false foregroundServices=true forcingToForeground=null 

lastRequestedGc=-12s74ms lastLowMemory=-12s74ms reportLowMemory=false 

Services: 

    - ServiceRecord{41fb2578 u0 club.androidy.callcontrolfree/.PhoneCallService} 

и в Process LRU list (sorted by oom_adj): разделе

ProC#24: adj=prcp /FS trm= 0 27922:club.androidy.callcontrolfree/u0a10088 (fg-service) 

Я не привязываю свое служение к какой-либо деятельности

Я начинаю свою службу, как это:

  Intent srvIntent = new Intent(context, PhoneCallService.class); 
      context.stopService(srvIntent); 
      PhoneCallService.stopService = false; 
      context.startService(srvIntent); 

и это мой onStartCommand:

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Context context = getApplicationContext(); 
    String txtNotificationTicker = context.getString(R.string.strNotificationTicker); 
    String txtNotificationTitle = context.getString(R.string.strNotificationContexTitle); 
    String txtNotificationText = context.getString(R.string.strNotificationContexText); 
    String ns = Context.NOTIFICATION_SERVICE; 

    Intent cancelIntent = new Intent(this, StopServiceReceiver.class); 
    PendingIntent pendingIntentCancel = PendingIntent.getBroadcast(this, 0, cancelIntent 
      , PendingIntent.FLAG_UPDATE_CURRENT); 

    NotificationCompat.Action action = 
      new NotificationCompat.Action 
        .Builder(R.drawable.ic_cancel 
        , context.getString(R.string.stop_service), pendingIntentCancel) 
        .build(); 

    Intent mIntent = new Intent(this,MainActivity.class); 
    int HELLO_ID = 1; 
    PendingIntent pendingIntent = PendingIntent.getActivity(this, HELLO_ID, mIntent , 0); 
    this.mNotificationManager = (NotificationManager) getSystemService(ns); 

    NotificationCompat.Builder builder = new NotificationCompat.Builder(context); 

    Notification notification = builder 
      .setContentIntent(pendingIntent) 
      .setContentTitle(new StringBuilder(String.valueOf(txtNotificationTitle))) 
      .setSmallIcon(R.drawable.ic_launcher) 
      .setLargeIcon(getBitmap(context, R.drawable.ic_launcher)) 
      .setContentText(new StringBuilder(String.valueOf(txtNotificationText)) 
        .append(": ").append(PHONE_NUMBER).toString()) 
      .setWhen(System.currentTimeMillis()) 
      .setPriority(NotificationCompat.PRIORITY_MAX) 
      .addAction(action) 
      .build(); 

    notification.flags |= Notification.FLAG_NO_CLEAR; 
    startForeground(1, notification); 
    this.pt = new PhoneThread(); 
    this.pt.start(); 
    return Service.START_STICKY; 
} 

Я эквайринг замок бодрствование как этот

 if (PhoneCallService.sCpuWakeLock == null) { 
       PhoneCallService.sCpuWakeLock = ((PowerManager) 
         context.getSystemService(Context.POWER_SERVICE)) 
         .newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"CCF"); 
       PhoneCallService.sCpuWakeLock.acquire(); 
      Log.e("androidy","wacklock acquired"); 
      } 

Я уже пытался многие решения от SO и google, но ничего не работает для меня.

я увидел и попытался все это:

Foreground service killed by OS

Foreground service gets killed every time

Android foreground service being killed under certain conditions

Foreground Service being killed on Notification click

Foreground service being killed by Android

Пользователи, которые сохраняют приложение, составляют всего 30% от общей установки.

Что я делаю неправильно?

ответ

3

Edit:

Если у вас есть один и тот же вопрос, пожалуйста, проверьте ЭНЕРГОСБЕРЕЖЕНИЯ Параметры в настройках телефона, если ваш телефон имеет эту функцию, он будет убивать ваше приложение после того, как экран выключен и не допустит его для работы в фоновом режиме.

Оригинальный ответ: После долгих поисков я решил это сам

оказалось, что мое приложение было энергоемкая, как показано на рисунке ниже

enter image description here

Следовательно, Андроид был вынужден остановить его после 5 минут, когда на экране нет активности для экономии энергии.

Я решил проблему энергопотребления, и все стало хорошо.

enter image description here

+0

Спасибо за ответ ... –