问题
I have nested nested class where I am trying to display a toast for the outer most class before I exit the app. The toast works just fine if I comment out exit statement, so I know I'm accessing the context correctly. I have also tried putting the toast in a thread where it sleeps for 2000 ms (and vice versa for the exit statement), but that still does not work.
All I want to do display a toast and exit the program. (It would be nice to do it simultaneously, if possible...)
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
EDIT** Why all the down votes? I'm not working with any Activities (outer most class is a Service
, and the two inner are normal Java classes) so some of the answers (although I very much appropriate the responses) do not work.
回答1:
Thank you all who tried answering this for me, but unfortunately the solutions did not work.
Turns out that I have to do this when I try using Toast
within a Service
.
Once again, to those who tried answering it: thank you.
To those who down voted my post without stating the reason, next time leave constructive criticism rather than leaving me in the dark. I'm here to learn and I can't learn if you simply down vote with providing a legit reason. I'm not a mind reader.
回答2:
USE getApplicationConext() INSTEAD OF CONTEXT
Toast.makeText(getApplicationConext(), "Timer up. Existing app...", Toast.LENGTH_SHORT).show();
回答3:
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();
};
More details Refer Here
回答4:
please use
Toast.LENGTH_LONG
instead of
Toast.LENGTH_SHORT
Toast.makeText(context, "Timer up. Existing app...", Toast.LENGTH_LONG).show();
Now your toast will be display after System.exit();
来源:https://stackoverflow.com/questions/35570530/android-toast-is-not-showing-before-system-exit