后台服务唤醒锁和线程

时间:2013-05-07 13:15:01

标签: android android-asynctask android-service android-internet

我的应用应该每X分钟检查一次。 web内容,我必须实现wakeLock,因为它应该在屏幕关闭时工作,但同时我必须使用AsyncTask,因为它使用网络(在主线程中被禁止)。

确保调用.release()的好方法是什么?

阻止PostExecute不是总是被调用(当doInBackground()出错时),最终在主线程中也是如此。

2 个答案:

答案 0 :(得分:0)

如果您使用Google Cloud Messaging,则可以在设备请求服务器数据提取时使用定义的X分钟时段从服务器进行控制。您的移动应用程序将响应更新的服务器数据,我们将减少服务器负载,仅在需要时加载。

GCM:入门 http://developer.android.com/google/gcm/gs.html

实施GCM时,您的服务器可以向设备发送“发送至同步”或“带有负载的消息”。在这里(http://developer.android.com/google/gcm/adv.html

查看Pro的Con

在您的移动应用中,您将拥有一个extends GCMBaseIntentService的课程,您将收到一个关于消息的电话,在这里您可以发出服务器请求并发出通知。

@Override
protected void onMessage(Context context, Intent intent) {
    try {
        conn = (HttpURLConnection) url.openConnection();
        conn.setDoOutput(true);
        conn.setUseCaches(false);
        conn.setFixedLengthStreamingMode(bytes.length);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type",
                "application/x-www-form-urlencoded;charset=UTF-8");
        // post the request
        OutputStream out = conn.getOutputStream();
        out.write(bytes);
        out.close();
        // handle the response
        int status = conn.getResponseCode();            
...

答案 1 :(得分:0)

最后我发现了一些类似的问题:

android wait asynctask to finish

Android: how to wait AsyncTask to finish in MainThread?

希望能帮助别人。