runOnUiThread在销毁应用程序时停止工作

时间:2012-07-09 22:57:00

标签: java android multithreading

所以这就是发生的事情:我正在使用runOnUiThread()方法在该类从另一个手机接收消息时从另一个类更改图像视图。我通过使用mainclass.runOnUiThread(new Runnable ...)等来调用它。它在第一次运行应用程序时工作,但是当我按下后退按钮退出应用程序,然后再次启动应用程序时,图像视图不再更新。我拍摄的日志向我显示一切正常并且正在运行,但图像视图不会改变。我没有收到任何错误,当我运行应用程序时它没有崩溃,它只是不更新​​图像视图。知道可能导致这种情况的原因吗?

编辑*:这就是我实际用来改变不扩展活动的类中的imageView

peerActivity.runOnUiThread(

                                new Runnable(){

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

                                    }

                                });

其中peerActivity持有其他类引用,ivPHoto是Image View。我认为我需要做的是找到一种在程序关闭时杀死该线程的方法(当我进入程序管理器时,它仍然有Force Close按钮可用)。有没有办法做到这一点?

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

3 个答案:

答案 0 :(得分:2)

请尝试使用View.post(...)

答案 1 :(得分:0)

我使用新的Handler(Looper.getMainLooper())。post(...);

您甚至可以从后台线程创建它。

答案 2 :(得分:0)

看起来您的Runnable正在关闭对您的活动的引用。当您按下然后再次启动活动时,将破坏旧活动并创建新实例。您的后台主题将继续对原始活动进行更改,该活动已不再存在,因此更改其视图无效。

您需要在actiivty暂停或停止时停止更新线程,并在恢复或启动激活时再次启动(再次,视情况而定),并确保始终更新实际可见的激活