2014-01-12 18 views
1

我有一個服務,我需要檢查一段時間後它是否仍然在靜態上下文中運行。 [我注意到這種情況僅適用於Android奇巧]KitKat:退出主要活動後服務爲空

我所做的:

我的服務:

public class Servizio extends Service { 

    public static Service servizio; 

    [...Other things...] 

    @Override 
    public void onCreate() { 
    super.onCreate(); 
    servizio = this; 
     scheduleMyAlarmToDoSomethingAfterSomeTime(); 

    } 

[...Other things...] 
} 

然後我啓動從主活動的服務的onCreate

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    [...] 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ServizioUtility.toggleService(this, true); 
    [...] 
} 

然後我檢查一分鐘後它是否爲空(帶有警報由服務啓動的警報接收器。需要注意的是,接收器工作正常,下面的代碼被調用):

if (Servizio.servizio!=null) {// FIXME 
    [...] 
    //THIS IS NOT CALLED IN THE 2ND SCENARIO 
} 

有2個方案:

  1. 我跑的活動,等待啓動報警並Servizio.servizio不爲null。
  2. 我運行該活動,使用enter image description here「殺死」它,等待警報接收器被調用,Servizio.servizio現在爲空。請注意,另一方面,該服務仍在運行(從設置 - >應用程序 - >運行菜單中進行檢查)。

第二種情況發生了什麼?

+0

見類似的問題(與解決方案)http://stackoverflow.com/q/20636330/624109 – Muzikant

+0

服務可能出現在設置 - > Apps->運行在運行,但它實際上沒有運行。您可以通過讓服務向SD寫入文件或實際檢查正在運行的進程來進行檢查。它沒有運行。 – 3c71

+0

是的,它看起來並不是,實際上服務單例是空的。 –

回答

1

我簡單的解決方法:

它集報警與1秒延遲並通過調用stopForeground()來停止服務。

@Override 
public void onTaskRemoved(Intent rootIntent) { 
    super.onTaskRemoved(rootIntent); 
    if (Build.VERSION.SDK_INT >= 19) { 
     Intent serviceIntent = new Intent(this, MessageHandlerService.class); 
     serviceIntent.setAction(ACTION_REFRESH); 
     serviceIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); 
     AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE); 
     manager.set(AlarmManager.RTC, System.currentTimeMillis()+1000, PendingIntent.getService(this, 1, serviceIntent, 0)); //1 sec delay 
     stopForeground(true); 
    } 
}