Java Android中的线程重用
我有一个Android的代码,这是资源密集型的。它处理位图,然后将其保存到SD卡 因为在主线程上运行它需要很多时间,所以我是这样做的:Java Android中的线程重用,java,android,multithreading,threadpool,Java,Android,Multithreading,Threadpool,我有一个Android的代码,这是资源密集型的。它处理位图,然后将其保存到SD卡 因为在主线程上运行它需要很多时间,所以我是这样做的: new Thread(new Runnable() { public void run() { //do work } }).start(); 但是,我发现如果在线程完全执行之前调用这段代码,那么之前的线程就会被删除,并被新任务覆盖。SD卡仅显示最后一张图像 所以我写了一个静态线程: Thread t=new Thread(ne
new Thread(new Runnable() {
public void run() {
//do work
}
}).start();
但是,我发现如果在线程完全执行之前调用这段代码,那么之前的线程就会被删除,并被新任务覆盖。SD卡仅显示最后一张图像
所以我写了一个静态线程:
Thread t=new Thread(new Runnable() {
public void run() {
//do work
}
};
但是,不能多次调用t.start()。(llegalThreadStateException)
我应该怎么做才能克服这个问题呢?使用上面给出的代码生成第二个线程将可以并行运行这两个线程。一定是发生了什么事使它停止工作 确保你对自己的工作有一个了解,并记录所有错误。两个线程是否都试图写入同一个文件,而第二个线程由于无法写入而失败 对于实际线程,一旦线程退出,就不能再次启动它,而是需要保持线程的活动状态并在循环中运行它。当不再需要线程时,线程应该进入睡眠状态,等待消息到达,给它新的工作。这可以使用
阻塞队列
之类的方法来完成
或者,您可以使用类似于
ThreadPoolExecutor
的工具,而不是自己管理线程,并不断将Runnable
s发送到该线程。我不知道这是否有帮助,但我的映像保存位置是IMG+(CurrentTimeInMillises)+.jpg。获取线程内的当前时间与覆盖有关系吗?发现错误。我在线程中使用了类全局变量,使它们用最新的值重写。使用局部变量更新代码。很好。谢谢