Java中的线程管理
我在android应用程序中创建了2个线程,但它们不工作:Java中的线程管理,java,android,multithreading,Java,Android,Multithreading,我在android应用程序中创建了2个线程,但它们不工作: final Thread t1 = new Thread() { // @Override public void run() { camera.takePicture(null, null, photoCallback); Log.e("mediafile", mediaFile+"");
final Thread t1 = new Thread() {
// @Override
public void run() {
camera.takePicture(null, null, photoCallback);
Log.e("mediafile", mediaFile+"");
}
};
t1.start();
final Thread t2 = new Thread() {
// @Override
public void run() {
Intent myIntent = new Intent(CameraActivity.this, ModificationActivity.class);
Log.e("le chemin de la photo", "" + mediaFile);
myIntent.putExtra("imagePath", ""+mediaFile);
startActivity(myIntent);
}
};
try {
t1.join();
t2.start();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
当我开始我的意图时,我的变量总是为null,因为第一个线程没有完成
我希望你能帮助我
提前感谢大家
这是日志:
11-05 14:29:59.936 18216-18216/com.mcm.citadium I/编舞﹕ 跳过72帧!应用程序可能在其主线程上做了太多工作。11-05 14:30:05.140 18216-18387/com.mcm.citadium E/mediafile﹕ 空11-05 14:30:05.148 18216-18389/com.mcm.citadium E/le chemin de la photo﹕ 空11-05 14:30:05.652 18216-18216/com.mcm.citadium E/fin de photoCallback﹕ /存储/sdcard0/Pictures/MyCameraApp/IMG_20131105_143005.jpg
我认为您可以使用[处理程序]: 安排两个线程 一些例子: 或者[AsyncTask]:几乎等于处理程序+线程+消息+线程池 一些例子:
为什么t2的开始在try-catch中?我认为,如果您简单地将两个开始都放在try-catch之外,然后将两个线程都加入其中,那么这应该是可行的
t1.start();
t2.start();
try {
t1.join();
t2.join();
}
catch (Exception e) { e.printStackTrace(); }
首先,您不需要创建任何线程来捕获图像-您可以在主线程上安全地运行camera.takePicture-它将在另一个线程中处理其工作,请参见 例如,您可以在button onClick处理程序中触发拍照活动:
shootButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCamera.takePicture(null, null, photoCallback);
}
});
然后,您的photoCallback将看起来像:
Camera.PictureCallback photoCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
// generate file path for new picture
String fileName = "myPicture.jpg";
String mediafile = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)
.getCanonicalPath() + "/mydir/" + fileName;
// launching new activity to modify picture
Intent myIntent = new Intent(CameraActivity.this,
ModificationActivity.class);
Log.e("le chemin de la photo", "" + mediaFile);
myIntent.putExtra("imagePath", ""+mediaFile);
startActivity(myIntent);
}
};
哪个变量是空的?看起来第一个线程并没有设置任何变量。Java中的并发性并不简单。如果你有这样的问题,我强烈建议你在尝试使用多线程制作一个真正的应用程序之前,阅读所有关于这个主题的文章。这是一个很好的起点->t1.join阻塞直到线程t1终止,您的问题不是线程问题。发布实际堆栈跟踪。我怀疑您在日志语句中得到了t1内部的异常,并且该问题与线程无关。实际上,我甚至不知道您为什么在这种情况下使用线程?好的,所以我想我会在容易的时候努力搜索:。无论如何,非常感谢你的帮助!