Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android上从c2dm listener唤醒/启动不运行应用程序?_Android_Android Asynctask_Android C2dm - Fatal编程技术网

如何在Android上从c2dm listener唤醒/启动不运行应用程序?

如何在Android上从c2dm listener唤醒/启动不运行应用程序?,android,android-asynctask,android-c2dm,Android,Android Asynctask,Android C2dm,当我的应用程序未在后台运行时,我在测试过程中遇到问题。我向它广播c2dm消息,它确实收到了,我服务执行异步任务从我的服务器获取一些数据,一切正常,直到它在“onPostExecute”上失败并出现MessageQueue错误: 将消息发送到死机上的处理程序 线 当应用程序在后台运行时,一切正常,但当应用程序不在后台运行时,一切都会失败。我一定要把它弄醒吗?谢谢 更新:以下是我的异步任务的片段: private class getNewMessages extends AsyncTask<V

当我的应用程序未在后台运行时,我在测试过程中遇到问题。我向它广播c2dm消息,它确实收到了,我服务执行异步任务从我的服务器获取一些数据,一切正常,直到它在“onPostExecute”上失败并出现MessageQueue错误:

将消息发送到死机上的处理程序 线

当应用程序在后台运行时,一切正常,但当应用程序不在后台运行时,一切都会失败。我一定要把它弄醒吗?谢谢

更新:以下是我的异步任务的片段:

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...
    }       
 }

您是否在广播接收器内启动
AsyncTask
?如果是这样,您可能希望将
AsyncTask
移动到一个服务,并从接收方启动该服务。广播接收器的用途不仅仅是基本的簿记,或者只是开始一项服务或活动


<强>编辑< /强>:也考虑使用非常方便的类,它在一个单独的线程中处理它的意图并在完成时停止它自己。

我正在运行从服务中的ASycTask,我的接收器启动服务。你能用AsyncTask的代码片段更新你的问题吗?如果有异常,你能发布堆栈跟踪吗?@Roman Nurik:包括堆栈跟踪。我刚刚读到一篇文章说AsyncTask应该只从UI线程使用。不知道这是否正确。是的,
onPostExecute
在调用线程上被调用,该线程必须是活动的,并且必须有一个
循环器
。。。我不确定是否必须从UI线程调用
AsyncTask
,但这是有意义的。如果您是从
IntentService
运行此代码,则说明您已经处于非UI线程中。我已删除了AsyncTask,并且在应用程序未运行时它可以正常工作。不知道我是否真的需要这个服务。。。我只是不希望应用程序在获取数据时冻结。会吗?当它从服务内部执行时?您可以只生成一个单独的线程而不使用AsyncTask。IntentService为您生成一个线程;普通的服务在主线程中运行,所以要小心。
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)