无法从CountDownTimer的onTick内部显示Toast消息(在服务内部运行)

时间:2014-02-22 09:18:19

标签: android handler toast countdowntimer

我正在尝试从CountDownTimer类的onTick()函数内部显示Toast消息。这个类在服务中运行。

简单地做Toast.maketext(“tag”,“toast message”) - 使应用程序崩溃。

所以我尝试了一个处理程序 - 使用处理程序,应用程序不会崩溃,但我也没有看到Toast消息。任何有关错误的帮助都会有所帮助。

我确信我的倒数计时器正常运行并且正在调用onTick - 我添加了LogCat语句来确认。

public class MyServicelockCountdownTimer extends CountDownTimer {

    public FBServicelockCountdownTimer(long millisInFuture,
            long countDownInterval) {
        super(millisInFuture, countDownInterval);
    }

    @Override
    public void onFinish() {
    }

    @Override
    public void onTick(long millisUntilFinished) {
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(
                                    getApplicationContext(),
                                    "This is toast message from inside onTick of the CountDownTimer inside the Service",
                                    Toast.LENGTH_LONG).show();
                        }
                    });

                } else {

                }
            } catch (NameNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
}

3 个答案:

答案 0 :(得分:2)

尝试使用Activity中的this而不是使用getApplicationContext():

Toast.makeText(
    YourActivity.this,
    "This is toast message from inside onTick of the CountDownTimer inside the Service",
    Toast.LENGTH_LONG).show();

答案 1 :(得分:0)

尝试使用Looper类的getMainLooper()方法 -

返回应用程序的主循环程序,它位于应用程序的主线程中。 //来自android docs。

您还应该考虑将Activites绑定到服务以处理UI更新。

查看此link以获取更多详细信息。

答案 2 :(得分:0)

public abstract void onReceive (Context context, Intent intent)

在onReceive中你会上下文

在onReceive()上提供给你的Context上调用getApplicationContext(),就像在Activity上调用getApplicationContext()一样。