onPostExecute在异步任务中的doInBackground之前执行

时间:2013-02-14 06:54:53

标签: android android-asynctask

在搜索了很长时间后,我浏览了以下链接并理解,

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

AsyncTask never executes onPostExecute

但我想对服务器进行一些API点击,在获取所有数据后,我想从Splashscreen转移到我的mainactivity,下面是我的代码。 。 。

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活动中从服务器读取数据。我怎样才能在doinBackground中完成异步任务之后实现它,应该调用onProgress。

2 个答案:

答案 0 :(得分:1)

实际上,

new read_syntask().execute();

new write_syntask().execute();

都有异步调用,它们不等待完成任务并执行下一个执行步骤,因此在完成onPostExecute()之前执行AsyncTask。< / p>

你要做的是,

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

来自get()的{​​{1}}方法将等待完成AsyncTask,然后AsyncTask将执行。 (但我认为它会阻止UI线程。)

更新:(最佳方法)

实际上,不需要onPostExecute() AsyncTask,您可以在Activity的方法中直接编写Startsyntask if-else条件,也可以直接编写用于启动raw_data的代码1}}

Tabbar

应位于finish(); startActivity(new Intent("com.sample.app.Tabbar")); read_syntask的{​​{1}}。

答案 1 :(得分:0)

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

我不太了解。但也许使用Handler可以提供帮助。在异步任务的onPostExecute之后和处理程序的handleMessage之后发送消息,执行您想要执行的操作。

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