【问题标题】:app crahes onCreate, because of Timer [closed]由于计时器,应用程序在创建时崩溃 [关闭]
【发布时间】:2013-10-01 17:44:26
【问题描述】:

当我尝试此代码时,我的应用程序崩溃了? 我希望我不断检查 MediaPlayer (MP) 是否正在播放,如果是,我希望文本显示“正在播放”-但如果它没有播放,我希望它阅读“未播放”。

我没有收到来自 Eclipse 的任何警告,但是当我导出它时,它仍然在加载时崩溃。 我知道设置 TextView 的代码不存在,但这不是问题。 ( 我想 ) 如果有其他方法可以做到这一点,我会很高兴朝着正确的方向前进。

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
                      //The Timer
                                Thread playingtimer = new Thread (){
                                    public void run() {
                                        try{
                                            int time = 1;
                                            while(time > 0) {
                                            sleep(100);

                                            if (MP.isPlaying()){ 
                                //set the TextView here "Now Playing"
                                            }
                                            else 
                                //set the TextView to "NOT Playing"
                                            }
                                        } 
                                        catch (InterruptedException e) {
                                        e.printStackTrace();
                                        }
                                        finally{

                                        }
                                    }
                                };
                                playingtimer.start();

【问题讨论】:

  • 发布 Logcat。没有它,很难诊断出崩溃。

标签: android multithreading timer oncreate


【解决方案1】:

我知道设置 TextView 的代码不存在,但这不是问题。 (我认为)

这正是问题所在。您正在尝试从背景 Thread 更新 View。您应该使用runOnUiThread()HandlerAsyncTask 来更新UI

These answers talk about handler and asynctask

Example of runOnUiThread

【讨论】:

  • 以下哪些最容易学习?
  • 我喜欢AsyncTaskrunOnUiThread() 也很简单
  • 我已经发布了几个示例链接,这样您就可以看到您想要使用的内容。
  • thnx 很多...过去几个小时我一直在为此奋斗..
【解决方案2】:

这里的问题是,如果您尝试从该计时器修改 TextView,它将崩溃,因为 android 中最重要的规则之一是您不能从除主线程之外的任何线程修改任何视图,并且您正在尝试从您的自定义工作线程更改它,以使其工作,将修改视图的代码包装到 runOnUIThread 方法中,或者提出您自己的 Handler 机制以在主线程中运行该代码。

希望这会有所帮助。

问候!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 2017-07-27
    相关资源
    最近更新 更多