Java 当应用程序被销毁时,runOnUiThread停止工作

Java 当应用程序被销毁时,runOnUiThread停止工作,java,android,multithreading,Java,Android,Multithreading,下面是发生的情况:当另一个类接收到来自另一部手机的消息时,我使用runOnUiThread()方法更改该类的图像视图。我使用mainclass.rununuithread(newrunnable…)等来调用它。它在应用程序第一次运行时起作用,但是当我点击后退按钮退出应用程序,然后再次启动应用程序时,图像视图不再更新。我拍摄的日志显示一切正常,正在运行,但图像视图没有改变。我没有收到任何错误,当我运行应用程序时它也不会崩溃,它只是不更新图像视图。你知道是什么引起的吗 编辑*:这就是我在不扩展活动的

下面是发生的情况:当另一个类接收到来自另一部手机的消息时,我使用runOnUiThread()方法更改该类的图像视图。我使用mainclass.rununuithread(newrunnable…)等来调用它。它在应用程序第一次运行时起作用,但是当我点击后退按钮退出应用程序,然后再次启动应用程序时,图像视图不再更新。我拍摄的日志显示一切正常,正在运行,但图像视图没有改变。我没有收到任何错误,当我运行应用程序时它也不会崩溃,它只是不更新图像视图。你知道是什么引起的吗

编辑*:这就是我在不扩展活动的类中实际用来更改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");

                                    }

                                });
其中PeePractivity保存另一个类引用,ivPHoto是图像视图。我认为我需要做的是找到一种在程序关闭时终止该线程的方法(当我进入程序管理器时,它仍然有可用的强制关闭按钮)。有没有办法做到这一点

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

尝试改用。

我使用新处理程序(Looper.getMainLooper()).post(…)


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

看起来您的Runnable正在关闭对活动的引用。当您按back键,然后再次启动活动时,旧活动将被销毁,并创建一个新实例。您的后台线程继续对原始活动进行更改,而原始活动已不存在,因此对其视图进行更改没有任何效果


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

刚刚尝试过,但未起作用。我猜你是在一个单独的线程上解码一个图像。您是否正在使用
异步任务
?如果不是的话,你一定要这样做;它将解决您的问题,因为您将把解码后的图像返回到onPostExecute()方法并将其设置在那里。onPostExecute()和onPreExecute()以及onProgressUpdate()都在UI线程中运行,并且应该始终工作。