java - Java中的线程管理

标签 java android multithreading

我在我的 Android 应用程序中创建了 2 个线程,但它们不起作用:(。

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();
            }

当我开始我的 Intent 时,我的变量始终为 null,因为第一个线程尚未完成。

希望你能帮助我:D

提前感谢大家

这是日志:

11-05 14:29:59.936 18216-18216/com.mcm.citadium I/Choreographer﹕ Skipped 72 frames! The application may be doing too much work on its main thread. 11-05 14:30:05.140 18216-18387/com.mcm.citadium E/mediafile﹕ null 11-05 14:30:05.148 18216-18389/com.mcm.citadium E/le chemin de la photo﹕ null 11-05 14:30:05.652 18216-18216/com.mcm.citadium E/fin de photoCallback﹕ /storage/sdcard0/Pictures/MyCameraApp/IMG_20131105_143005.jpg

最佳答案

首先,您不需要创建任何线程来捕获图像 - 您可以在主线程上安全地运行 camera.takePicture - 无论如何它都会在另一个线程中处理其工作(请参阅documentation)。

因此,例如,您可以在按钮 onClick 处理程序中触发拍照 Activity :

        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 - Java中的线程管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19789741/

相关文章:

java - 为 Java 桌面应用程序创建安装程序

java - 由 scribe (java) 处理 facebook/twitter 的 utf-8

java - 线程Java代码问题

Java padding 性能破坏

c# - 函数运行时用于显示图片的线程

java - 从java中的子包类访问父包类?

java - 如何在db2中存储文件大小

Android 停止 Runnable onBackPressed()

android - 带有数据绑定(bind)的约束布局没有响应

android - 我可以在我的 list 中添加多个接收者吗?