所以这就是发生的事情:我正在使用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线程,他们都给了我相同的结果:程序在第一次运行时完美运行,但是当我点击后退按钮并关闭它时重新打开它,图像视图不再更新。如果我强制关闭应用程序,它会再次正常工作,直到我关闭它并重新打开它。
答案 0 :(得分:2)
请尝试使用View.post(...)。
答案 1 :(得分:0)
我使用新的Handler(Looper.getMainLooper())。post(...);
您甚至可以从后台线程创建它。
答案 2 :(得分:0)
看起来您的Runnable正在关闭对您的活动的引用。当您按下然后再次启动活动时,将破坏旧活动并创建新实例。您的后台主题将继续对原始活动进行更改,该活动已不再存在,因此更改其视图无效。
您需要在actiivty暂停或停止时停止更新线程,并在恢复或启动激活时再次启动(再次,视情况而定),并确保始终更新实际可见的激活