Java Android中的线程重用

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

我有一个Android的代码,这是资源密集型的。它处理位图,然后将其保存到SD卡

因为在主线程上运行它需要很多时间,所以我是这样做的:

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。获取线程内的当前时间与覆盖有关系吗?发现错误。我在线程中使用了类全局变量,使它们用最新的值重写。使用局部变量更新代码。很好。谢谢