1

找了很久,通过下面的链接,明白了,

http://developer.android.com/reference/android/os/AsyncTask.html#cancel(boolean)

AsyncTask 从不执行 onPostExecute

但我想对服务器进行一些 API 访问,在获取所有数据后,我想从 Splashscreen 移至我的主要活动,下面是我的代码。. . .

class Startsyntask extends AsyncTask<Void, Void, Void> 
    {

         @Override
         protected Void doInBackground(Void... arg0) 
         { 
            raw_data = new File(Environment.getExternalStorageDirectory() + "/.MyFoldernew");
            if(raw_data.exists())
            {
                Log.e("directory exists", " already ");
                new read_syntask().execute();
            }
            else
            {
                Log.e("directory created", " newly ");
                raw_data.mkdirs();
                new write_syntask().execute();
            }
            return null;    
         }

         @Override
         protected void onPostExecute(Void unused) 
         {
             if( i == 6)
             {
                finish();
                startActivity(new Intent("com.sample.app.Tabbar"));
             }
         }
    }

并且在代码read_synctaskwrite_synctask是另一个与某些特定操作有关的异步任务,在这些异步任务中,它在 doinBackground 之后调用 onPostexecute 。

实际上它移动到 Tabbar Activity 并且 API 点击继续,我在 Tabbar Activity 中从服务器读取数据。只有在完成 doinBackground 中的异步任务后,我才能实现它,应该调用 onProgress 。

4

2 回答 2

1

实际上,

new read_syntask().execute();

new write_syntask().execute();

两者都有异步调用,不等待完成任务并执行下一个执行步骤,因此您的执行onPostExecute()在完成之前进行AsyncTask

你要做的是,

使用 new read_syntask().execute().get();new write_syntask().execute().get();

现在get()方法 fromAsyncTask将等待 AsyncTask 完成,然后onPostExecute()执行。(但我认为它会阻塞 UI 线程)。

更新:(最佳方法)

其实不需要Startsyntask AsyncTask,可以直接在Activity的方法中写if-else条件,也可以自己的启动代码raw_dataTabbar

finish();
startActivity(new Intent("com.sample.app.Tabbar"));

应该在read_syntaskor write_syntask'sonPostExecute()中。

于 2013-02-14T07:00:32.343 回答
0

引用“只有在完成 doinBackground 中的异步任务后,我才能实现它,应该调用 onProgress 。”

我知道的不多。但也许使用 Handler 可以提供帮助。在异步任务的 onPostExecute 和处理程序的 handleMessage 之后发送消息,做你想做的事。

http://developer.android.com/reference/android/os/Handler.html

于 2013-02-14T07:18:13.577 回答