runOnUiThread停止工作,当应用程序被破坏

问题描述:

因此,这里就是发生的事情:我使用的是runOnUiThread()方法时,该类从其他手机接收到一条消息改变从另一个类的形象图。我使用mainclass.runOnUiThread(new Runnable ...)来调用它,等等。它在第一次运行应用程序时运行,但当我点击后退按钮退出应用程序,然后再次启动应用程序时,Image View不再更新。我拍摄的日志显示,一切正常并正在运行,但Image View不会更改。我没有收到任何错误,在运行应用程序时它不会崩溃,它只是不更新​​Image View。任何想法可能会造成这种情况?runOnUiThread停止工作,当应用程序被破坏

编辑*:所以这就是我实际使用来改变一个类的ImageView的大小不活动

peerActivity.runOnUiThread(

           new Runnable(){ 

            @Override 
            public void run() { 
             Log.v("[email protected]", "Thread is running"); 
             Log.v("[email protected]", decodedImage.toString()); 
             // TODO Auto-generated method stub 
             peerActivity.ivPhoto.setImageBitmap(decodedImage); 
             Log.v("[email protected]", "Past UI Change"); 

            } 

           }); 

凡peerActivity持有其他类的引用和ivPHoto是图片浏览。我想我需要做的是在程序关闭时找到一种杀死该线程的方法(当我进入程序管理器时,它仍然具有“强制关闭”按钮)。有没有办法做到这一点?

Edit2 *:所以我尝试了一系列不同的方法来处理UI线程,它们都给了我相同的结果:程序在第一次运行时完美运行,但是当我点击后退按钮并关闭它时,重新打开它,Image View不再更新。如果我强制关闭应用程序,它会再次正常工作,直到我关闭并重新打开它。

+0

我猜你是在一个单独的线程解码图像。你在使用'AsyncTask'吗?如果不是的话,你一定要转向那个; http://developer.android.com/reference/android/os/AsyncTask.html 它将解决您的问题,因为您将解码图像返回到onPostExecute()方法并将其设置在那里。 onPostExecute()和onPreExecute()和onProgressUpdate()都在UI线程中运行,并且应该始终工作。 – 2012-07-10 17:49:36

尝试使用View.post(...)代替。

+0

刚刚尝试过,没有工作。还试着用处理程序得到了相同的结果。 – user1513272 2012-07-10 13:48:01

我使用新的处理程序(Looper.getMainLooper())后(...)。

你甚至可以从后台线程创建此。

它看起来像你的Runnable被关闭到活动为您提供参考。当您按回来然后再次开始您的活动时,您的旧活动将被销毁并创建一个新实例。您的后台线程将继续更改已不存在的原始活动,因此对其视图所做的更改不起作用。

您需要在活动暂停或适当停止时停止更新线程,并在活动恢复或开始时重新启动(再次,如适用),并确保始终更新实际的活动可见。