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