我的应用应该每X分钟检查一次。 web内容,我必须实现wakeLock,因为它应该在屏幕关闭时工作,但同时我必须使用AsyncTask,因为它使用网络(在主线程中被禁止)。
确保调用.release()的好方法是什么?
阻止PostExecute不是总是被调用(当doInBackground()出错时),最终在主线程中也是如此。
答案 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?
希望能帮助别人。