0

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

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

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

4

2 回答 2

0

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

android等待异步任务完成

Android:如何在 MainThread 中等待 AsyncTask 完成?

希望这会帮助某人。

于 2013-05-07T18:56:01.523 回答
0

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

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

当您实施 GCM 时,您的服务器可以向设备发送 Send-to-Sync 或 Messages with Payload。在此处查看 Pro's Con ( http://developer.android.com/google/gcm/adv.html )

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

@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();            
...
于 2013-05-07T13:36:22.177 回答