您好我的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时,它不会起作用 - 当然是因为错误的上下文......
我该如何解决?
编辑:
我做了一些更改,现在它在后台运行,但应用程序崩溃:
在我的MainActivity中设置
public static Context getAppContext() {
return MainActivity.mContext;
}
在onCreate中:
MainActivity.mContext = MainActivity.this;
在gcm onMessag()
中AsyncTask taskDoStuff = new AsyncTask(MainActivity.getAppContext());
taskDoStuff.execute();
答案 0 :(得分:1)
GCMBaseIntentService
根据文档扩展IntentService:
根据需要启动服务,使用工作线程依次处理每个Intent,并在失去工作时自行停止。
这意味着只要onMessage
完成,服务就会被终止。
由于onMessage()
已经在工作线程中,您可以直接在onMessage()
进行后台工作,而不需要AsyncTask
。
如果您确实需要重用AsyncTask,则可以使用taskDoStuff.get()
代替taskDoStuff.execute()
来使用当前线程检索结果。