2014-03-19 87 views
1

我被阻止了幾天,無法找到答案。RemoteService - 關閉啓動後重新啓動活動

我從一個Activity開始一個遠程服務。開始服務後,我關閉啓動活動。 我從任務管理器中關閉了主Activity,如下所示:home_btn長按,顯示打開的應用程序列表,然後向左滑動到主Activity上。

發生的事情是我的服務重新啓動!即使認爲它是一個遠程服務,它擁有自己的進程,並不依賴於啓動活動!

所有的內部變量將被重置,我不想這樣做。

- 我不希望使用useForeground()方法,因爲我不希望我的服務是在通知可見

我現在開始這樣的遠程服務和服務啓動(我可以看到它在菜單設置 - > Apps->標籤中運行):

btnStartSrv.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     startService(new Intent("com.example.servicerst_tst.RemoteService"));      
    } 

}); 

Android清單XML看起來是這樣的:

<service android:name="com.example.servicerst_tst.RemoteService" 
      android:process=":serviceTST" > 
      <intent-filter> 
       <action android:name="com.example.servicerst_tst.RemoteService" > 
       </action> 
      </intent-filter> 
</service> 

服務類:

public class RemoteService extends Service{ 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     // We want this service to continue running until it is explicitly 
     // stopped, so return sticky.   
     return START_STICKY; 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

} 

我看到服務重新啓動或重新設置..在DDMS中。 當關閉主Activity時,服務從DDMS中的列表中消失,並在大約2秒內自行啓動。這也可以在服務中看到。如果您放置一些在服務生命週期中發生變化的內部變量。它們將被重置,就像服務在關閉主Activity之後自行重啓一樣。

我只想讓我的服務不重置,重新啓動時我關閉主發射器活動。 如果用戶關閉啓動器活動,從任務管理器或他的錯誤,我希望服務在後臺運行。

我在這裏做錯了什麼或從代碼中丟失了一些東西以防止重新啓動? 爲什麼重置服務?

+0

它實際上在做什麼嗎?你爲什麼擔心它重新啓動?任何操作系統在需要時都可以關閉(以節省內存,電力等)。 –

+0

目前它沒有做一件事,但你可以在其中放入幾件東西並以同樣的方式重新開始。 我試圖儘量減少最簡單的服務形式的例子。 我在服務中設置了一些變量,並且還啓動了一些線程,結果與這種簡單的服務形式相同。我不希望服務重新啓動。 正如我所說的,我不希望用戶關閉從任務管理器啓動Activity並重新啓動我的服務。 我該如何避免這個重新啓動問題? – marisxanis

+0

假設用戶重新啓動手機。你將如何防止服務被殺?改變你對這個問題的看法。當你的服務退出時,將狀態保存到永久存儲器。重新啓動時,加載狀態。 –

回答

1

Android Developers - Services:「如果服務被聲明爲在前臺運行(稍後討論),那麼它幾乎不會被殺死,否則,如果服務已啓動並且長時間運行,則系統會降低其在後臺任務列表中的位置隨着時間的推移而變化,並且該服務將變得非常容易被破壞 - 如果您的服務已啓動,那麼您必須將其設計爲適當地處理系統重新啓動「。

聲明您的服務在前臺運行具有特定要求:「前臺服務必須爲狀態欄提供通知,該通知置於」正在進行「標題下,這意味着通知不能被解除,除非服務要麼停止,要麼從前臺移除。「和「要請求你的服務在前臺運行,請調用startForeground()。」我知道你說過你不希望它成爲前臺服務,但你必須接受Android爲你設定的參數。

+0

ook,明白了。從我所看到的,我必須讓它重新開始可靠!如果你想一直活着,也可以使用startForeground()。 – marisxanis

0

解決啓動時重新啓動服務的問題活動關閉! 你應該使用startForeground()來避免這個問題。 因此startForeground()在關閉啓動Activity時解決了重新啓動問題。 我也做了服務,重新啓動可靠。

不過我有一個問題..如何服務......如Facebook和其他大型服務在後臺運行沒有任何startForeground()實施。 此外,它們並沒有被系統殺死,並且它們在沒有任何startForeground()實現的情況下永遠在後臺運行。他們永遠活在後臺。肯定是可能的。 有誰知道如何?