【问题标题】:Android - Using Thread on my method is force closing my appAndroid - 在我的方法上使用 Thread 会强制关闭我的应用程序
【发布时间】:2013-03-04 21:18:40
【问题描述】:

我正在创建一个线程并在我的一个方法中启动它,并且在睡眠之后,应用程序刚刚关闭:s 无法理解为什么..任何线索? 这是我的代码:

btn.setOnClickListener(new OnClickListener(){

                @Override
                public void onClick(View arg0) {
                    if(!toggleRemove){
                        grupo.increment();
                        vibrate();

                    }else
                        grupo.decrement();
                    showToPanel(grupo);
                    new Thread(){
                        public void run(){
                            try {
                                sleep(3000);
                            } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                            showToPanel(null);
                        }
                    }.start();

                }

            });

非常感谢!

改用这个解决了:

btn.setOnClickListener(new OnClickListener(){

                @Override
                public void onClick(View arg0) {
                    if(!toggleRemove){
                        grupo.increment();
                        vibrate();

                    }else
                        grupo.decrement();
                    showToPanel(grupo);



                    new Handler().postDelayed(new Runnable(){
                        @Override
                        public void run(){
                           showToPanel(null);
                        }
                    }, 3000); 

                }

            });

【问题讨论】:

  • showToPanel 是做什么的?它会更新 UI 吗?
  • 是的,伙计,确实如此。但我已经把它修好了,不知道我不能在android开发中使用普通线程。使用处理程序的东西,它工作了。无论如何,非常感谢伙计!真的很感激;)

标签: android multithreading sleep


【解决方案1】:

请在发布崩溃错误时发布完整的堆栈跟踪。但我的猜测是 showToPanel 对 UI 进行了更改?如果是这样,您不能在另一个线程上执行此操作,您必须在主线程上执行此操作。最好的方法是将延迟消息发布到处理程序并更改其中的 UI,因为除了在另一个线程上完成睡眠之外没有其他实际工作。

【讨论】:

  • 是的,伙计,确实如此。但我已经把它修好了,不知道我不能在android开发中使用普通线程。使用处理程序的东西,它工作了。无论如何,非常感谢伙计!真的很感激;)
  • 您可以使用(正常)线程来满足您的需求(尽管首选 AsyncTasks)。您只是不能使用非 UI 线程(即后台线程)来更改 UI。
  • 如果需要立即执行某项任务,则首选 AsyncTasks。如果您要在后台持续执行某些操作,尤其是如果您想确保仅存在 1 个工作线程实例,则仍然首选普通线程。
  • 谢谢大家有帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
  • 2014-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多