Android:Toast 在 system.exit() 之前未显示
Android: Toast is not showing before system.exit()
我嵌套了 nested class,在我退出应用程序之前,我试图在其中显示最外层 class 的 toast。如果我注释掉 exit 语句,toast 工作得很好,所以我知道我正在正确访问上下文。我也试过将 toast 放在线程中休眠 2000 毫秒(exit 语句反之亦然),但这仍然不起作用。
我只想干杯并退出程序。 (最好能同时进行,如果可能...)
public class A extends Service {
private Context context;
//...
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
context = this;
//...
return START_STICKY;
}
Handler disToast= new Handler(new Callback() {
@Override
public boolean handleMessage(Message msg) {
Toast.makeText(context, "see ya", Toast.LENGTH_SHORT).show();
return true;//also tried false, but that did not work...
}
});
private Runnable r = new Runnable() {
public void run() {
new CountDownTimer(3000, 1000) {
public void onFinish() {
Message msg=disToast.obtainMessage();
msg.obj="my message";
disToast.sendMessage(msg);
handler.removeCallbacks(updateTimerThread);
System.exit(0);
}
}.start();//end of inner most class
};//end of first inner class
}//outermost class
编辑** 为什么全是反对票?我没有使用任何活动(最外面的 class 是一个 Service
,里面的两个是正常的 Java classes)所以一些答案(虽然我非常恰当的回应)不起作用。
使用 getApplicationConext() 代替上下文
Toast.makeText(getApplicationConext(), "Timer up. Existing app...", Toast.LENGTH_SHORT).show();
请使用
Toast.LENGTH_LONG
而不是
Toast.LENGTH_SHORT
Toast.makeText(context, "Timer up. Existing app...", Toast.LENGTH_LONG).show();
现在您的 toast 将在 System.exit();
之后显示
Handler disToast= new Handler(new Callback() {
@Override
public void handleMessage(Message msg) {
String mString=(String)msg.obj;
Toast.makeText(this, mString, Toast.LENGTH_SHORT).show();
}
});
private Runnable r = new Runnable() {
public void run() {
new CountDownTimer(3000, 1000) {
public void onFinish() {
Message msg=disToast.obtainMessage();
msg.obj="your message";
disToast.sendMessage(msg);
handler.removeCallbacks(updateTimerThread);
System.exit(0);
}
}.start();
};
更多详情参考Here
感谢所有尝试为我回答此问题的人,但不幸的是,这些解决方案均无效。
事实证明,当我尝试在 Service
.
中使用 Toast
时,我必须执行 this
再次感谢尝试回答的人:谢谢。
那些在不说明原因的情况下给我post投反对票的人,下次留下建设性的批评而不是离开我在黑暗中。我是来学习的,如果您只是提供合法理由就否决投票,我将无法学习。我没脑子reader.
我嵌套了 nested class,在我退出应用程序之前,我试图在其中显示最外层 class 的 toast。如果我注释掉 exit 语句,toast 工作得很好,所以我知道我正在正确访问上下文。我也试过将 toast 放在线程中休眠 2000 毫秒(exit 语句反之亦然),但这仍然不起作用。
我只想干杯并退出程序。 (最好能同时进行,如果可能...)
public class A extends Service {
private Context context;
//...
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
context = this;
//...
return START_STICKY;
}
Handler disToast= new Handler(new Callback() {
@Override
public boolean handleMessage(Message msg) {
Toast.makeText(context, "see ya", Toast.LENGTH_SHORT).show();
return true;//also tried false, but that did not work...
}
});
private Runnable r = new Runnable() {
public void run() {
new CountDownTimer(3000, 1000) {
public void onFinish() {
Message msg=disToast.obtainMessage();
msg.obj="my message";
disToast.sendMessage(msg);
handler.removeCallbacks(updateTimerThread);
System.exit(0);
}
}.start();//end of inner most class
};//end of first inner class
}//outermost class
编辑** 为什么全是反对票?我没有使用任何活动(最外面的 class 是一个 Service
,里面的两个是正常的 Java classes)所以一些答案(虽然我非常恰当的回应)不起作用。
使用 getApplicationConext() 代替上下文
Toast.makeText(getApplicationConext(), "Timer up. Existing app...", Toast.LENGTH_SHORT).show();
请使用
Toast.LENGTH_LONG
而不是
Toast.LENGTH_SHORT
Toast.makeText(context, "Timer up. Existing app...", Toast.LENGTH_LONG).show();
现在您的 toast 将在 System.exit();
之后显示Handler disToast= new Handler(new Callback() {
@Override
public void handleMessage(Message msg) {
String mString=(String)msg.obj;
Toast.makeText(this, mString, Toast.LENGTH_SHORT).show();
}
});
private Runnable r = new Runnable() {
public void run() {
new CountDownTimer(3000, 1000) {
public void onFinish() {
Message msg=disToast.obtainMessage();
msg.obj="your message";
disToast.sendMessage(msg);
handler.removeCallbacks(updateTimerThread);
System.exit(0);
}
}.start();
};
更多详情参考Here
感谢所有尝试为我回答此问题的人,但不幸的是,这些解决方案均无效。
事实证明,当我尝试在 Service
.
Toast
时,我必须执行 this
再次感谢尝试回答的人:谢谢。
那些在不说明原因的情况下给我post投反对票的人,下次留下建设性的批评而不是离开我在黑暗中。我是来学习的,如果您只是提供合法理由就否决投票,我将无法学习。我没脑子reader.