来自另一个活动android中的一个活动的asyncTask

时间:2014-06-03 08:30:54

标签: android android-asynctask

我只是想知道什么是最好的,也可能是最简单的方法。我有两个活动LoginAcitivty和Main Activity。

我已将MainActivity中的AsyncTask编码为内部类,它将更新发送到Web服务。当我单击MainActivity的注销按钮时,会将应用程序返回到“登录活动”。是否仍然可以运行ASyncTask,即使有不同的活动正在运行,还是有其他方法可以做这样的事情?

任何建议都将不胜感激 感谢

2 个答案:

答案 0 :(得分:1)

Asynctask与" Entity"创建它,在你的情况下它将是MainActivity,所以它不会在你的活动的破坏中存活(我相信你一旦用户注销就调用主活动的finis()方法) 您可以做的是使用在后台运行的服务并使用异步任务轮询您的服务器:

服务应如下所示:

 public class PollService extends Service {

    @Override
    public void onCreate() {
      super.onCreate();    
    }

    public void onStart(Intent intent, int startId) {
      (new PollAsyncTask(this)).execute();
    }

    //callback used to retrieve the result from the asynctask
    void callBack(String result) {
      //here is your logic, taking the result back from the async task
      //eventually re-run the asynctask
      (new PollAsyncTask(this)).execute();
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }
}

AsyncTask看起来像这样:

 private class PollAsyncTask extends AsyncTask<String, Void, String> {
    private PollService caller;
    PollAsyncTask(PollService caller) {
         this.caller = caller;
    } 

    @Override
    protected String doInBackground(String... params) {
        //do your polling here and return something meaningful to the service,
        return SOMETHING_REFERRING_TO_THE_1_OF_3;
    }

    @Override
    protected void onPostExecute(String result) {
        //Give the result back to the caller:
        this.caller.callBack(result);
    }

    @Override
    protected void onPreExecute() {//nothing special here}

    @Override
    protected void onProgressUpdate(Void... values) {//nothing special here}

  }

这样,您的异步任务将轮询您的服务器当前处于活动状态的任何活动。 当第一次活动第一次运行时(即在 onCreate 方法中),服务应由第一个活动启动:

 @Override
 public void onCreate(Bundle savedInstanceState) {
     if (savedInstanceState==null) {//only the first time
          Intent serviceIntent = new Intent();
          serviceIntent.setAction("com.yourcompany....PollService");
          startService(serviceIntent);
     }

 }

希望这有帮助。

答案 1 :(得分:0)

根据我的理解,你的MainActivity中有一个内部类。 所以只需将AsyncTask放在一个单独的Class中,然后就可以从两个Activites中调用它。

赞:new YourAsyncTask().execute();

问候。