尝试/ catch Thread.sleep()之前不会显示Toast

evt*_*evt 3 android sleep toast

当我尝试show();Toast 时,我有一个奇怪的问题.你会在下面看到两个由a分隔的try/catch and Thread.sleep();Toast.在这种情况下,第二个Toast toast2会显示但toast1不会显示.

如果我删除try/catch两个Toasts将显示没有问题.

我在其他地方看到过toast.show();在UI线程上发出请求,这可能会被其他操作冲突.我想知道这是否与我在这里遇到的问题相同Thread.sleep();如何解决这个问题?

谢谢

TestService.java

    ///Debug - Show a Toast
    // Toast does NOT show up
    Toast toast1 = Toast.makeText(context,"Service Started", Toast.LENGTH_SHORT);
    toast1.show();

    //Try to sleep for roughly 2 seconds
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    //Debug - Shows a Toast
    Toast toast2 = Toast.makeText(context,"Sleep completed", Toast.LENGTH_SHORT);
    toast2.show();
Run Code Online (Sandbox Code Playgroud)

Guy*_*Guy 8

在现实生活中,你可能会有一些逻辑而不仅仅是"睡觉",对吗?正确的android方式,根据您的示例,启动服务将通过在工作线程上执行它.这将确保您不会得到ANR.

你可以看起来像:

    new AsyncTask<Void, Void, Void>() {

        @Override
        protected void onPostExecute(Void result) {
            Toast toast2 = Toast.makeText(context, "Sleep completed",
                    Toast.LENGTH_SHORT);
            toast2.show();
        }

        @Override
        protected void onPreExecute() {
            Toast toast1 = Toast.makeText(context, "Service Started",
                    Toast.LENGTH_SHORT);
            toast1.show();
        }

        @Override
        protected Void doInBackground(Void... params) {
            // Try to sleep for roughly 2 seconds
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;

        }

    }.execute();
Run Code Online (Sandbox Code Playgroud)