0

ユーザーに情報を表示するメインアクティビティを含むAndroidアプリケーションがあります。メイン アクティビティが開始されると、Web サービスを 10 秒ごとにチェックするサービスが作成されます。WS が応答を返すと、通知がポップされます。メイン アクティビティとサービスの間に接続はありません (それらを一緒に開始したい場合を除きます)。問題は、サービスが実行されているため、アクティビティの動作が非常に遅いことです。

どうすれば直せますか? IntentService を使用してみましたが、10 秒後に死亡しました。

私が使用しているコード:

@Override
public void onCreate() {    

super.onCreate();
context = this.getApplicationContext();
mPeriodicEventHandler = new Handler();
mPeriodicEventHandler.postDelayed(doPeriodicTask, PERIODIC_EVENT_TIMEOUT); 
}

private Runnable doPeriodicTask = new Runnable()
{
    public void run() 
    {
        NotificationServices.Notification();
        mPeriodicEventHandler.postDelayed(doPeriodicTask, PERIODIC_EVENT_TIMEOUT);
    }
 };
4

4 に答える 4

0

Handler を使用してこれを行うことができます

final Handler handler = new Handler();
        Runnable r = new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                handler.postDelayed(r, 10000);
            }
        };
        handler.postDelayed(r, 0);
于 2012-09-04T08:35:14.393 に答える
0

API デモのフォアグラウンド サービス コントローラーの例を参照し、Web サービスが更新されるたびに保留中のイベントを更新します。

Asynctaskの使用も検討してください。

これが役立つことを願っています:)

于 2012-09-05T04:10:24.597 に答える
0

ハンドラーがメイン UI スレッドでタスクを実行しているため、アクティビティの UI に影響を与えたり、ANR を引き起こしたりする可能性があります。

新しい HandlerThread を作成し、そこにタスクを投稿することをお勧めします。

ただし、本当に 10 秒ごとにデータをプルする必要があることを確認してください。モバイルインターネットとデバイスの電力消費にはコストがかかります。

Persistent ConnectionまたはGoogle Cloud Messagingの使用を検討してください

于 2012-09-04T08:21:25.087 に答える
0

ポーリングの代わりに、GCM、つまり c2dm を使用することをお勧めします。これは、c2dm が設計されたシナリオです...

参考のために、これらのリンクをチェックしてください。

http://developer.android.com/guide/google/gcm/index.html

于 2012-09-04T08:18:39.500 に答える