doInBackground()可以正常工作。Looper.loop()之后的代码将无法工作。 Looper.Loop()之后且不执行onPostExceute()后,日志未打印。我需要等到方法1,2,3执行。如果不使用Looper.prepare(),则method1中会发生异常。

@Override
    protected Void doInBackground(Void... params) {
        try {

                if (Looper.myLooper() == null)
                    Looper.prepare();
                method1();
                method2();
                method3();
                Looper.loop();

                Log.d(TAG,"after loop()");
            } else {
                method4(); //inside asyn task
            }

            Log.d(TAG,"doInBackground end");

        }catch (Exception e) {
            Log.d(TAG,"doInBackground exception "+e);
        }


        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        try {


            Log.d(TAG, "onPostExecute");



            //............

        }catch (Exception e){
            Log.d(TAG,"onPostExecute end");
        }
    }


    @Override
    protected void onPreExecute() {
        //.....
    }

最佳答案

Looper.loop使线程循环永远等待消息队列中的传入事件并运行关联的可运行对象。永远不要在AsyncTask上调用它,它会导致整个AsyncTask线程无限循环,从而死锁所有将来的AsyncTasks。仅当您了解如何使用它时,才应在线程上调用它。

关于android - Looper.loop()之后未执行onPostExecute(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43503786/

10-12 03:21