0

私のアプリはX分ごとにチェックする必要があります。画面がオフのときに機能するようにwakeLockを実装する必要がありますが、同時にネットワークを使用するため(メインスレッドで禁止されている)AsyncTaskを使用する必要があります。

.release() が呼び出されることを確認するための良い方法は何ですか?

ブロック PostExecute は常に呼び出されるわけではなく (doInBackground() でエラーが発生した場合)、最終的にメイン スレッドで呼び出されます。

4

2 に答える 2

0

最後に、同様の質問をいくつか見つけました。

アンドロイド待機非同期タスクが終了する

Android:AsyncTaskがMainThreadで終了するのを待つ方法は?

それが誰かを助けることを願っています。

于 2013-05-07T18:56:01.523 に答える
0

Google クラウド メッセージングを使用すると、デバイスがサーバー データ フェッチを要求するタイミングと、定義された X 分の期間を使用するタイミングをサーバーから制御できます。モバイル アプリは、更新されたサーバー データに対して最も応答性が高くなり、必要な場合にのみロードするようにサーバーの負荷を減らします。

GCM: はじめに http://developer.android.com/google/gcm/gs.html

GCM を実装すると、サーバーは Send-to-Sync または Messages with Payload をデバイスに送信できます。ここでプロのコンを確認してください(http://developer.android.com/google/gcm/adv.html

モバイル アプリには、extends GCMBaseIntentServiceonMessage の呼び出しを受け取るクラスがあり、ここでサーバー リクエストを作成して通知を発行できます。

@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 に答える