1

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

编辑*:所以这就是我实际用来更改不扩展 Activity 的类中的 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 是图像视图。我认为我需要做的是在程序关闭时找到一种方法来终止该线程(当我进入程序管理器时,它仍然有“强制关闭”按钮可用)。有没有办法做到这一点?

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

4

3 回答 3

2

尝试改用View.post(...)

于 2012-07-09T23:04:15.157 回答
0

看起来您的 Runnable 正在关闭对您的活动的引用。当您按下并再次开始您的活动时,您的旧活动将被销毁并创建一个新实例。您的后台线程继续对不再存在的原始活动进行更改,因此对其视图进行更改无效。

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

于 2013-03-20T20:29:51.017 回答
0

我使用 new Handler(Looper.getMainLooper()).post(...);

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

于 2012-07-10T14:42:58.160 回答