我正在尝试从GCMBaseIntentService运行AsyncTask,但是当我这样做时应用程序崩溃了。 关键是我想使用MainActivity中的上下文让我的AsyncTask工作(显示ProgressDialog< - 需要上下文)。当我从MainActivity执行相同操作时,它可以工作,但是当我尝试从GCMIntentService调用AsyncTask时,没有显示ProgressDialog - 我该怎么做? 或者还有其他方法可以调用AsyncTask吗?
我希望每次收到消息时都调用AsyncTask(onMessage()) 几个星期我试图解决这个问题,仍然没有提示
以下是我的代码的一部分:
MainActivity.java
public class MainActivity extends Activity {
public static Context getAppContext() {
return MainActivity.mContext;
}
onCreate(MainActivity.java)
MainActivity.mContext = MainActivity.this;
我的AsyncTask:
public class AsyncTask extends AsyncTask<String,String,String> {
Context mContext;
public AsyncTask(Context mContext) {
this.mContext = mContext;
}
GCMIntentService onMessage():
AsyncTask doStuff= new AsyncTask(MainActivity.getAppContext());
doStuff.execute();
编辑:
当我使用MainActivity.getAppContext()作为GCM中的上下文时
AsyncTask确实运行,做了所有的事情,比如“DatabaseHandler db = new DatabaseHandler(mContext);” 它做了所有db的东西,我也可以在日志中看到,但是有很多警告。 例如,在AsyncTask中,不显示ProgressDialog:
pDialog = new ProgressDialog(mContext);
pDialog.setMessage("blablabla");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
当我使用“this”而不是“MainActivity.getAppContext()”
时此日志显示:
AndroidRuntime(3029): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
AndroidRuntime(3029): at android.view.ViewRootImpl.setView(ViewRootImpl.java:768)
AndroidRuntime(3029): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:278)
AndroidRuntime(3029): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
AndroidRuntime(3029): at android.app.Dialog.show(Dialog.java:289)
AndroidRuntime(3029): at com.test.app.AsyncTask.onPreExecute(AsyncTask.java:98)
AndroidRuntime(3029): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)
AndroidRuntime(3029): at android.os.AsyncTask.execute(AsyncTask.java:535)
AndroidRuntime(3029): at com.test.app.GCMIntentService.onMessage(GCMIntentService.java:62)
AndroidRuntime(3029): at com.google.android.gcm.GCMBaseIntentService.onHandleIntent(GCMBaseIntentService.java:223)
AndroidRuntime(3029): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
AndroidRuntime(3029): at android.os.Handler.dispatchMessage(Handler.java:102)
AndroidRuntime(3029): at android.os.Looper.loop(Looper.java:136)
AndroidRuntime(3029): at android.os.HandlerThread.run(HandlerThread.java:61)
答案 0 :(得分:0)
您正在尝试从服务打开对话框,我认为最好的办法是启动透明背景的活动并从那里启动对话框。
您可以从Service