2014-09-10 102 views
1

我使用粘性的Android服務通過使用代碼片段在服務類如果應用程序管理器中的用戶停止應用程序,則希望重新啓動服務。

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    return START_STICKY; 
}  

但只有重新啓動時應用程序獲取武力封閉的Android O/S,雖然當用戶強制停止應用從應用程序管理器,服務也終止。 但是,我的要求是,我想永遠保持運行服務,直到應用程序安裝在設備中。 任何人都可以幫助我嗎?

+0

你的服務做什麼?如果它一直在運行,那麼就會出現設計問題,因爲這會消耗電池。防止用戶殺死你的服務讓我看起來像你正在做的事你不想讓用戶知道/控制... – Nicklas 2014-09-10 16:04:35

+0

是的尼克拉斯,我明白這個問題,但它是客戶端的要求,它的應用程序功能,希望跟蹤登錄的用戶是否安裝了應用程序。 – Pankaj 2014-09-11 05:15:52

+0

與其他解決方案相比,您可能仍然更適合使用不同的服務。您可以在卸載應用程序時註冊廣播,並向服務器發送消息。除此之外,如果服務器在當前時間內沒有收到設備發送的消息(如果用戶在卸載時沒有連接到互聯網),則可以認爲應用程序已卸載。就「登錄」狀態而言,你的意思是用戶是否登錄到應用程序或主動使用該設備?無論哪種情況,您都不需要服務來檢查這一點。 – Nicklas 2014-09-11 10:29:27

回答

-1

您可以使用Forground Service使您的服務活着。

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 

    Notification notification=new Notification(R.drawable.icon,"The Service Is Running",System.currentTimeMillis()); 
    Intent j=new Intent(this, Activity.class); 
    PendingIntent pi=PendingIntent.getActivity(this, 0, 
      j, 0); 

    notification.setLatestEventInfo(this, "Notification Message", "RunningService", pi); 
    notification.flags|=Notification.FLAG_NO_CLEAR; 

    startForeground(1, notification); 


    return START_STICKY; 
} 
+0

如果用戶選擇停止應用程序管理器的應用程序,這個Forground Service將如何工作? – Pankaj 2014-09-10 14:41:00

+0

@Pankaj:該服務將活着,直到通知在那裏。當設備處於低可用內存時,它可能會終止 – 2014-09-10 16:29:21

+0

嗨Arash,我剛剛嘗試了您的代碼,當我運行該應用程序時,顯示了通知,但一旦我停止從應用程序管理器(強制停止)的應用程序通知消失了,服務終止。在這裏我想繼續跑步。希望你能幫上忙。 – Pankaj 2014-09-11 05:11:59

-1

它不可能。但是你可以使用前臺服務。在低內存的情況下android操作系統可以殺死前臺服務