2014-08-30 46 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,则可以避免发生异常。

相关问题