我找到了一些关于如何从子类访问上下文的信息以及有关
的一些信息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
,....
答案 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();
}