我的应用程序应该检查每X分钟。网页内容和我必须实现wakeLock,因为它应该在屏幕关闭时工作,但同时我必须使用AsyncTask,因为它使用网络(在主线程中禁用它)。背景服务wakelock和线程
确保.release()会被调用的好方法是什么?
Block PostExecute并非全部调用(当doInBackground()中有错误时),最后在主线程中也是如此。
我的应用程序应该检查每X分钟。网页内容和我必须实现wakeLock,因为它应该在屏幕关闭时工作,但同时我必须使用AsyncTask,因为它使用网络(在主线程中禁用它)。背景服务wakelock和线程
确保.release()会被调用的好方法是什么?
Block PostExecute并非全部调用(当doInBackground()中有错误时),最后在主线程中也是如此。
如果您使用Google Cloud Messaging,则可以在设备请求服务器数据获取时使用定义的X分钟时间从服务器进行控制。您的移动应用程序将对更新的服务器数据做出最大响应,并且我们将减少服务器负载以仅在需要时加载。
GCM:入门 http://developer.android.com/google/gcm/gs.html
当你实现GCM,您的服务器可以发送发送到同步或邮件与有效载荷的设备。 (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();
...
最后,我发现了一些类似的问题:
android wait asynctask to finish
Android: how to wait AsyncTask to finish in MainThread?
希望这将帮助别人。
不,我不使用GCM - 我终于找到了一些相关的问题(和答案 - 我在下面发布)。 – 2013-05-07 18:54:43