2014-08-30 83 views
0

我的應用程序中有一些鏈接。它將開始可瀏覽的意圖是這樣的:如何在沒有「onSaveInstanceState後無法執行此操作」的情況下打開另一個應用程序?

Intent intent = new Intent(); 
intent.setAction(Intent.ACTION_VIEW); 
intent.addCategory(Intent.CATEGORY_BROWSABLE); 
intent.setData(Uri.parse(link)); 
startActivity(intent); 

然後它會打開瀏覽器。同時,某些內容正在後臺運行,需要更新UI。所以我得到這個:java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 我知道關於這個異常的原因。但如何解決它?後臺任務可以繼續運行會更好。但是,暫停它們也是可以接受的。

+0

用於從後臺任務更新UI嘗試runonUiThread – 2014-08-30 15:09:45

+0

如果活動位於後臺,爲什麼要更新UI? – eldjon 2014-08-30 15:09:51

+0

@eldjon如果您不點擊鏈接,更新將不會在後臺... – AngryYogurt 2014-08-30 15:12:15

回答

0

如果您使用的是AsyncTask,您確實不需要runOnUiThread()方法。 AsyncTask爲您提供您所需的一切。它封裝了兩種方法:在主線程上運行的preExecute()postExecute(),因此您可以更新這些方法中的UI組件。即使您需要逐步更新UI,AsyncTask也會處理在onProgressUpdate()方法中再次在主線程上運行的方法。這樣,你的代碼更乾淨,然後插入:爲了避免任何不必要的UI更新,而活動是不可見的asyncTask.cancel()爲您的活動的例子onPause()方法:

getActivity().runOnUiThread(new Runnable() { 
    public void run() { 
    } 
}); 

你甚至可以取消正在進行的任務。

0

如果UI對用戶不可見,你爲什麼要這樣做? 反正

從後臺任務更新UI嘗試runonUiThread

getActivity().runOnUiThread(new Runnable() { 
     public void run() { 
      //access UI here 
     } 
    }); 

http://android.okhelp.cz/java_android_code.php?s=runOnUiThread

+0

我只想在更新完成後關閉瀏覽器並返回到我的應用程序,或者可以在他們離開時暫停並在他們回來時啓動。 – AngryYogurt 2014-08-30 15:22:23

+0

它的工作原理!非常感謝! – AngryYogurt 2014-08-30 15:22:54

+0

@AngryYogurt我很高興它有幫助 – 2014-09-01 05:37:33

0

在用於更新UI回調,檢查活動被暫停或停止,也不要執行UI更新邏輯。您可以使用您在onResume()中設置爲true的標誌isForeground,並在onStop()中設置false。

或者,我發現如果在提交分段事務時使用commitAllowingStateLoss,則可以避免發生異常。

相關問題