从GCMBaseIntentService调用asynctask?

时间:2014-12-15 23:45:01

标签: java android android-asynctask

您好我的GCMIntenBaseIntenService

中有此代码
 @Override
    protected void onMessage(Context context, Intent intent) {

        AsyncTask taskDoStuff= new AsyncTask (context);
        taskDoStuff.execute();

    }

我的AsyncTask看起来像:

public class AsyncTask extends AsyncTask<String,String,String> {


Context mContext;



    public AsyncTask(Context mContext) {
    this.mContext = mContext;

}

当我从我的主要ACTIVITY直接调用我的asynctask它起作用 - AsyncTask运行并完成它的工作...... 但是当我尝试从GCMBaseIntentService调用asynctask时,它不会起作用 - 当然是因为错误的上下文......

我该如何解决?

使用:http://www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gcm-php-and-mysql/作为基本

编辑:

我做了一些更改,现在它在后台运行,但应用程序崩溃:

在我的MainActivity中设置

public static Context getAppContext() {
        return MainActivity.mContext;
    }
在onCreate中

MainActivity.mContext = MainActivity.this;

在gcm onMessag()

AsyncTask taskDoStuff = new AsyncTask(MainActivity.getAppContext());
        taskDoStuff.execute();

1 个答案:

答案 0 :(得分:1)

GCMBaseIntentService根据文档扩展IntentService

  

根据需要启动服务,使用工作线程依次处理每个Intent,并在失去工作时自行停止。

这意味着只要onMessage完成,服务就会被终止。

由于onMessage()已经在工作线程中,您可以直接在onMessage()进行后台工作,而不需要AsyncTask

如果您确实需要重用AsyncTask,则可以使用taskDoStuff.get()代替taskDoStuff.execute()来使用当前线程检索结果。