我的应用程序基本上是一个图像查看器。它可以从相机和单独的应用程序打开。
我打开图像查看器以查看和编辑图片。每个编辑操作都使用线程实现。如果由于按下主页按钮我的应用程序关闭,下次我用相机打开它。它抛出了一个。
这并不总是发生。仅在大型图像文件上进行大型编辑操作或编辑操作时。
我出现内存错误,有时会超时。
我想这是因为单击home时线程没有完成编辑操作。它仍然在后台运行。所以当我打开它时无法处理它。
我是对的吗?如果是这样,在完成/
之前停止线程的方法是什么你能帮助我吗?
答案 0 :(得分:0)
看起来像内存泄漏。检查代码中的内存泄漏
答案 1 :(得分:0)
可能会看一下我在大图像上打开内存问题时打开的一个帖子。关于可能对您有何帮助的几点建议: Strange out of memory issue while loading an image to a Bitmap object
答案 2 :(得分:0)
线程不会被垃圾收集,直到它们被停止或它们的进程被终止(这通常需要一段时间,即使在所有活动都关闭之后)。这也意味着这些线程引用的任何对象也不会被垃圾收集。
有多种方法可以关闭线程,具体取决于它究竟在做什么。最好的方法是在执行期间的某些点检查变量,并在设置该变量时退出run
- 方法。最佳位置通常在while
- 循环的条件下。您可以从外部设置该变量,并且线程将在下次检查时关闭。请记住将该变量标记为volatile
。例如:
private volatile boolean mStopped = false;
public void run() {
while(!mStopped) {
// do something
if(mStopped)
return;
// do something more
}
}
如果线程正在等待,您将不得不中断它。请参阅interrupt
- Thread
- 类的方法。