2013-02-14 81 views
1

搜索了很久之后,我通过以下链接去和理解,onPostExecute doInBackground之前执行Asyncronous任务

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

AsyncTask never executes 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是有一些特定的操作做,在这些Asyncronous任务,它调用doinBackground后onPostexecute另一asyncronous任务。

实际上,它移动到Tabbar Activity并且API命中仍在继续,我从Tabbar活动中的服务器读取数据。我如何才能在doinBackground中完成异步任务后执行该操作,应该调用onProgress。

+0

你可以尝试把startActivity在onPostExecute在read_synctask和write_synctask作为其中之一有你导航到下一个活动之前完成。为什么你使用两个异步任务? – Anukool 2013-02-14 06:59:21

回答

1

其实,

new read_syntask().execute(); 

new write_syntask().execute(); 

都有异步调用不等待完成的任务,并执行执行下一步,所以你的执行涉及到onPostExecute()前完成AsyncTask

你必须做的是,

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

现在从AsyncTaskget()方法将等待完成的AsyncTask然后onPostExecute()将执行。 (但我认为它会阻止UI线程)。

更新:(最好的方法)

其实,没有必要Startsyntask的AsyncTask的,您可以直接写的if-else条件在活动的方法raw_data,也是你的启动Tabbar

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

应该在read_syntaskwrite_syntaskonPostExecute()

+0

new read_syntask()。execute()。get()将阻止UI线程。 – Anukool 2013-02-14 07:03:57

+0

@Anukool - 是的,我知道,两个AsyncTasks都在'doInBackground()'中调用。而且要等待完整的Asynctask,你必须使用'get()'方法。 – user370305 2013-02-14 07:04:41

+1

我仍然无法理解使用两个多个AsyncTasks。 – Anukool 2013-02-14 07:10:05

0

引用“我应该如何在doinBackground完成异步任务后执行该操作,onProgress应该被调用。”

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

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

相关问题