同时启动两个进程

时间:2013-07-05 12:15:00

标签: java android thread-synchronization

我需要同时运行两个进程。 我写了代码:

    public void starttwoprocessing () {
    final Thread tworunprocessing = new Thread(new Runnable() {
            public void run() {
            FlashLight.onFlashResume();
            handler.post(new Runnable() {
                public void run() {
                    camera.takePicture(null, null, photoCallback);                      
                }
            });
        }
    });
    tworunprocessing.start();
}

首先开始:

camera.takePicture(null, null, photoCallback);

第二个:

FlashLight.onFlashResume();

更改具有相同结果的地点后。 在这种情况下,我得到第一个镜头,闪光灯稍后启动。 Thread.sleep(...);无效

如何同时开始闪光,并立即拍照? 感谢


这样写:

public class Launcher
{
    public void main(String args[]) throws IOException, InterruptedException
      {

        try {
        Process[] proc = new Process[2];
        proc[0] = new ProcessBuilder("FlashPreview.onFlashResumeStart()").start();
        Thread.sleep(3000);
        proc[1] = new ProcessBuilder("camera.takePicture(null, null, photoCallback)").start();

        try {
            Thread.sleep(3000);
        }
        catch (InterruptedException ex)
        {
        }
        proc[0].destroy();
        Thread.sleep(3000);
        proc[1].destroy();

    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
      }
}

调用:

mk = new Launcher();
        try {
            mk.main(null);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

我做错了什么。 根本不起作用,没有崩溃,但在日志中写道:07-05 16:38:58.217:W / System.err(30934):java.io.IOException:运行exec()时出错。命令:[FlashPreview.onFlashResumeStart()]工作目录:null环境:[ANDROID_SOCKET_zygote = 9,SECONDARY_STORAGE = / storage / extSdCard:/ storage / UsbDriveA:/ storage / UsbDriveB:/ storage / UsbDriveC:/ storage / UsbDriveD:/ storage / UsbDriveE:/ storage / UsbDriveF,ANDROID_BOOTLOGO = 1,EXTERNAL_STORAGE = / storage / sdcard0,ANDROID_ASSETS = / system / app,PATH = / sbin:/ vendor / bin:/ system / sbin:/ system / bin:/ system / xbin, ASEC_MOUNTPOINT = / mnt / asec,LOOP_MOUNTPOINT = / mnt / obb,BOOTCLASSPATH = / system / framework / core.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/ system / framework / ext.jar:/system/framework/framework.jar:/system/framework/framework2.jar:/system/framework/framework_ext.jar:/system/framework/android.policy.jar:/system/framework/services.jar :/system/framework/apache-xml.jar:/system/framework/sec_edm.jar:/system/framework/seccamera.jar,ANDROID_DATA = / data,LD_LIBRARY_PATH = / vendor / lib:/ system / lib,ANDROID_ROOT = /系统,ANDROID_PROPERTY_WORKSPACE = 8,66560,VIBE_PIPE_PATH = / dev / pip ES]

2 个答案:

答案 0 :(得分:2)

即使使用Threads,你的进程也会在eche之后运行。使用线程意味着第二个进程无需等待第一个进程完成。但最简单的方法是如何使用timeout or ProcessBuilder

同时触发两个进程

在第一个进程中运行第二个进程也是个好主意。至于我,这是最好的解决方案。

P.S。 privet,ne chasto yvidiw zdes svoih s ykrainu)))

答案 1 :(得分:0)

我已实施以下内容:

class MyTask extends AsyncTask<Void, Void, Integer> {
@Override
protected void onPreExecute() {
  super.onPreExecute();
  FlashLight.onFlashResume();
}


@Override
protected Integer doInBackground(Void... params) {
  return null;
}

@Override
protected void onPostExecute(Integer result) {
  super.onPostExecute(result);
  camera.takePicture(null, null, photoCallback);         
}
}