2016-04-26 82 views
0

我想從片段的onDestroy()運行一個長操作任務。我的目標是調用網絡調用來刪除一些數據,以防用戶通過從最近的應用程序中滑動來關閉應用程序。我希望在調用onDestroy()時啓動一個intent。當調用onDestroy()時運行長任務

目前,無論何時我嘗試初始化意圖,在我有機會操作調用之前,由於onDestroy()已經殺死了我的應用程序,所以我放棄了上下文。

我不想使用這個選項:Performing long running operation in onDestroy因爲像這樣運行一個線程不是正確的做法,而且看起來像一個危險的黑客。

從活動的onDestroy()調用操作導致了相同的錯誤。

Offcourse,我不想在ui線程上做任何工作,並且在我的操作完成之前「推遲」onDestroy()。

只是爲了通關,雖然getContext()不爲null,但當我到達SomeService類時,上下文已經爲空,因爲發送intent是異步操作。

@Override 
    public void onDestroy() { 
     Intent intent = new Intent(getContext(), SomeService.class); 
     getContext().startService(intent); 
     super.onDestroy(); 
    } 

回答

1

我建議開始,並在綁定的服務比如說onCreate()Activity,然後已結合服務,您可以輕鬆地開始清理實用程序放置在你的Service,即你要分服務啓動和清理的起點。

像:

//somewhere in onCreate() 
myServiceIntent = new Intent(this.getApplicationContext(), MyService.class); 
context.startService(myServiceIntent); 
context.bindService(myServiceIntent, serviceConnection, Context.BIND_AUTO_CREATE); 

,然後在onDestroy()

public void onDestroy() { 
    myService.cleanup(); 
    super.onDestroy(); 
} 

瞭解更多關於service binding

0

注意onDestroy()不能保證被調用。

使用應用程序上下文。

只要綁定了任何組件,綁定服務就會一直存在,因此您的啓動服務的變體更好,只是在作業完成後不要忘記使用stopSelf()。

相關問題