android - 具有不同按钮 View 的多线程 : Android

标签 android multithreading

所以我正在编写一个android代码,其中有3个按钮:录制、暂停、拍摄帧。录制按钮录制视频,暂停按钮暂停 VideoView 中显示的视频,拍摄帧按钮显示 imageView 中暂停的帧。现在我需要 3 个线程 - 一个主线程用于用户交互(暂停按钮),一个子线程记录视频(录制按钮),第二个子线程保存帧(拍摄帧按钮)。

protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            mvideoview = (VideoView) findViewById(R.id.videoView);
            imgview = (ImageView) findViewById(R.id.imageView);
            mrecord = (Button) findViewById(R.id.button);
            mpause = (Button) findViewById(R.id.button2);
            mtakeframe = (Button) findViewById(R.id.button4);

            mrecord.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                            dispatchTakeVideoIntent();
                            mvideoview.start();
                        }
            });

            mpause.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    mvideoview.pause();
                }
            });


            mtakeframe.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View view) {
                            Bitmap bmp = takeFrame();
                            imgview.setImageBitmap(bmp);
                        }
                    });
        }

        private void dispatchTakeVideoIntent() {
            //code directs towards the video recorder screen
        }

        protected void onActivityResult(int requestcode, int resultcode, Intent intent) {
            //recorded video sent back and its path stored
        }

        public Bitmap takeFrame() {
            //paused frame shown in imageView
        }

我尝试将不同的线程放在不同按钮的 onClick(View view) 上,但最终应用程序崩溃,并显示错误“只有创建 View 层次结构的原始线程才能触摸其 View 。”另外,如果我想再添加一个“播放”按钮(播放暂停的视频),那么我应该如何编写它,我无法理解。有人可以帮助我如何在 Android 中线程化这样的程序吗?

最佳答案

View对象只能通过UI线程修改或执行任何操作如果另一个线程尝试处理View对象,它应该像这样调用,

runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // do the view operation here
            }
        });

更多信息可以引用this , this

关于android - 具有不同按钮 View 的多线程 : Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45527265/

相关文章:

java - 从当前旋转计算出目标旋转所需的最小旋转

java - 不在事件调度线程上构造 Swing/AWT 小部件是否安全?

java - 如何从actionEvent监听器通知主线程

c++ - Producer Consumer 使用 intel-pin 内线程

Android - 如何以编程方式更改时间选择器模式?

android - 无法找到自定义样式

java - ListView 不使用自定义 View 更新大小

android - 请求权限无限循环

java - 在 java 8 中将核心池大小设置为 0 的有效用例是什么?

java - Java中的非阻塞堆栈