0

Я пытаюсь получить имя приложения, когда оно попадает на передний план. Я выполнил это, запустив фоновый сервис, в котором я реализовал Runnable для запуска этой службы каждую секунду. Это нормально работает во всех ОС, кроме Jelly Bean. Моя служба убита. Я знаю, что если приложение потребляет больше оперативной памяти, оно убивает доступные фоновые службы для управления необходимым пространством. Например, игры с высоким разрешением. Но я потеряю данные. Я реализовал Foreground Services. Его работа прекрасна. Я сомневаюсь, делает ли этот эффект каким-либо образом в вопросе эффективности или потребления батареи? Есть ли другой метод, кроме переднего плана?Сервис убит в Jelly Bean

Это сервис, который я сделал на переднем плане.

@Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     ReceiverRunning = true; 
     context = this; 

     Intent intent1 = new Intent(this, ComponentSelector.class); 
      PendingIntent pendingIndent = PendingIntent.getActivity(this, 1, intent1, 0); 
      Notification mNotification = new Notification(R.drawable.ic_launcher, "BackgroundApp", System.currentTimeMillis()); 
      mNotification.setLatestEventInfo(this, "BatteryUSage", "Click to open to app", pendingIndent); 
      mNotification.flags = mNotification.flags|Notification.FLAG_ONGOING_EVENT; 
      startForeground(1000, mNotification); 

     // Start service if not started. 
     if (!ForegroundApp.isRunning == true) { 
      context.startService(new Intent(context, Brightness.class)); 
     } 

     boolean has_tele = getPackageManager().hasSystemFeature(
       PackageManager.FEATURE_TELEPHONY); 
     if (has_tele == true) { 
      TelephonyManager teleman = (TelephonyManager) getBaseContext() 
        .getSystemService(Context.TELEPHONY_SERVICE); 
      if (teleman != null) 
       deviceId = teleman.getDeviceId(); 
     } 

     uId = deviceInfo(); 

     try { 
      NetworkInfo info = (NetworkInfo) ((ConnectivityManager) context 
        .getSystemService(Context.CONNECTIVITY_SERVICE)) 
        .getActiveNetworkInfo(); 
      if (info != null) { 
       Log.d("wifiRun", "Network available"); 
       ConnectivityManager conMan = (ConnectivityManager) context 
         .getSystemService(Context.CONNECTIVITY_SERVICE); 
       NetworkInfo.State wifi = null; 
       if (conMan.getNetworkInfo(1).isAvailable()) 
        wifi = conMan.getNetworkInfo(1).getState(); 
       if (wifi == NetworkInfo.State.CONNECTED 
         || wifi == NetworkInfo.State.CONNECTING) { 
        wifiCheck = true; 
        context.startService(new Intent(context, WiFi.class)); 
        Log.d("wifiRun","wifiCheck: " +wifiCheck); 
       } else { 
        Log.d("wifiRun","wifiCheck: " +wifiCheck); 
       } 
      } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

     // Register for Screen On and Screen Off. 
     IntentFilter intentFilter = new IntentFilter(); 
     intentFilter.addAction(Intent.ACTION_SCREEN_OFF); 
     intentFilter.addAction(Intent.ACTION_SCREEN_ON); 
     sReceiver = new ServiceDefinition(); 
     registerReceiver(sReceiver, intentFilter); 
     //return super.onStartCommand(intent, flags, startId); 
     return START_STICKY; 
    } 

ответ

0

Думаю, нет иного выхода. Вы также можете сделать свой сервис липким (http://developer.android.com/reference/android/app/Service.html#START_STICKY), но сделать сервис переднего плана более правильным способом в этой ситуации. Конечно, ваш сервис будет разряжать аккумулятор, поэтому старайтесь не использовать «тяжелые» операции в вашем сервисе.

Если вы предоставите исходный код своей службы, мы проверим, что вы реализуете все оптимальные.

+0

Вот оно, я отправил код. Пожалуйста, проверьте это. – madhu

+0

Почему вы запускаете 2 дополнительных услуги в своем основном сервисе? Все ли они на переднем плане? – Dimmerg

+0

Эти 2 дополнительных услуги не являются приоритетными. Именно здесь я получаю подробные сведения о деятельности переднего плана. – madhu