Android:在system.exit()之前没有显示Toast

时间:2016-02-23 06:38:51

标签: android toast

我有嵌套的嵌套类,我试图在退出应用程序之前为最外层的类显示吐司。如果我注释掉exit语句,toast工作正常,所以我知道我正在正确访问上下文。我也试过把吐司放在一个线程中,它睡眠时间为2000毫秒(反之亦然,对于退出语句),但这仍然不起作用。

我想做的只是显示祝酒并退出程序。 (如果可能的话,同时做它会很好......)

    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

编辑**为什么所有下来的选票?我没有使用任何活动(最外层的类是Service,而且两个内部是普通的Java类)所以一些答案(虽然我非常适合的答案)不起作用。

4 个答案:

答案 0 :(得分:1)

感谢所有试图为我解答此问题的人,但遗憾的是解决方案无效。

当我尝试在Toast内使用Service时,我必须this

再一次,对那些试图回答它的人:谢谢。

对于那些在未说明理由的情况下投票的人,下次离开建设性的批评,而不是让我陷入黑暗。我在这里学习,如果你只是通过提供合理的理由进行投票,我就无法学习。我不是读者。

答案 1 :(得分:0)

USE getApplicationConext()INSTEAD OF CONTEXT

Toast.makeText(getApplicationConext(), "Timer up. Existing app...", Toast.LENGTH_SHORT).show();

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

请使用

Toast.LENGTH_LONG而不是

Toast.LENGTH_SHORT


 Toast.makeText(context, "Timer up. Existing app...", Toast.LENGTH_LONG).show();

现在你的toast将在System.exit();

之后显示