通过TimerTask“Toast”消息

时间:2011-10-25 16:11:08

标签: android android-activity toast android-context

我找到了一些关于如何从子类访问上下文的信息以及有关

的一些信息
runOnUiThread(new Runnable() {
  public void run() {
    // Do something
  }
});

但在我的情况下,它不起作用。应用程序仍在运行,但活动可能已被破坏。第一个(主要)活动是创建TimerTask的父活动。我的代码:

TimerTask tt = new TimerTask() {
  @Override
  public void run() {
    // do something (cut)

    // and at the end show info
    getParent().runOnUiThread(new Runnable() {
      @Override
      public void run() {
        Toast.makeText(getParent(),
                  getResources().getString(R.string.st_toast_msg_stopped),
                  Toast.LENGTH_LONG).show();
      }
    });
  }
};
curTimer.schedule(tt, millisecondsUntilStop);

日志中没有错误/异常。但是没有显示烘烤的消息。 : - (

现在我不知道我能做什么/尝试。我希望有人能帮助我。

P.S。:也许我使用了错误的背景?但我也尝试了其他一些上下文,比如当前活动的上下文,ApplicationContext,....

2 个答案:

答案 0 :(得分:2)

你在getParent()这里使用了错误的上下文。而不是使用getParent()尝试使用这样的current_Activity.this

TimerTask tt = new TimerTask() {
  @Override
  public void run() {
    // do something (cut)

    // and at the end show info
    Activity_name.this.runOnUiThread(new Runnable() {
      @Override
      public void run() {
        Toast.makeText(Activity_name.this,
                  getResources().getString(R.string.st_toast_msg_stopped),
                  Toast.LENGTH_LONG).show();
      }
    });
  }
};

答案 1 :(得分:0)

为什么不使用AlarmManager并设置PendingIntent来启动广播,而不是使用TimerTask?当您发射广播并在您自己制作的BroadcastReciever中捕获它时,您将在BroadcastReciever中显示用于显示祝词的上下文。这是一个快速的高级示例。

无论您在活动中设置TimerTask,请执行以下操作:

AlarmManager alarmManager = (AlarmManager)Context.getSystemService(Context.ALARM_SERVICE);
Intent broadcastIntent = new Intent("yourBroadcastAction");
PendingIntent pendingIntent = PendingIntenet.getBroadcast(this, 0, broadcastIntent, 0);
alarmManager.set(AlarmManager.ELAPSED_REALTIME, millisecondsUntilStop, broadcastIntent);

然后只需创建一个包含yourBroadcastAction过滤器的BroadcastReciever,并在onRecieve()方法中像这样做吐司:

public void onRecieve(Context context, Intent intent){
  Toast.makeText(context,
              getResources().getString(R.string.st_toast_msg_stopped),
              Toast.LENGTH_LONG).show();
}