如何从Android上的c2dm监听器唤醒/开始不运行应用程序?

问题描述

| 当我的应用程序不在后台运行时,我在测试期间遇到问题。我向它广播了c2dm消息,它确实收到了它,我的服务执行AsyncTask来从我的服务器上获取一些数据,直到它在\ onPostExecute \上失败并出现MessageQueue错误为止,一切都很好:   向死者发送消息给处理者   线 当应用程序在后台运行时,一切都可以正常工作,但在非后台运行时,一切都会失败。我必须以某种方式唤醒它吗?谢谢! 更新:这是我的AsyncTask的代码段:
private class getNewMessages extends AsyncTask<Void,Void,Boolean> {
    private Context gContext;
    private String gToken;
    private int gNewMessages;

    public getNewMessages(Context context,String token) {
        super();
        gContext = context;
        gToken = token;
    }  
    protected Boolean doInBackground(Void... args) {
        gNewMessages = data.serverNewMessagesGet(gContext,gToken);
        return true;
    }   
    protected void onPostExecute(Boolean result) {
        Log.d(common.DEBUG_TAG,\"retrieved \" + gNewMessages + \" new messages\");     
        // notify user,etc...
    }       
 }
更新#2:错误堆栈跟踪
Handler{4585c038} sending message to a Handler on a dead thread
java.lang.RuntimeException: Handler{4585c038} sending message to a Handler on a dead thread
at android.os.MessageQueue.enqueueMessage(MessageQueue.java:184)
at android.os.Handler.sendMessageAtTime(Handler.java:457)
at android.os.Handler.sendMessageDelayed(Handler.java:430)
at android.os.Handler.sendMessage(Handler.java:367)
at android.os.Message.sendToTarget(Message.java:348)
at android.os.AsyncTask$3.done(AsyncTask.java:214)
at java.util.concurrent.FutureTask$Sync.innerSet(FutureTask.java:252)
at java.util.concurrent.FutureTask.set(FutureTask.java:112)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:310)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
at java.lang.Thread.run(Thread.java:1096)
    

解决方法

您是否正在从广播接收机中发射2英镑?如果是这样,您可能会想要将
AsyncTask
移至服务,然后从接收器启动该服务。广播接收器的用途不仅仅限于基本的簿记功能或仅用于启动服务或活动。 编辑:还可以考虑使用非常方便的
IntentService
类,该类在单独的线程中处理其意图,并在完成时自行停止。