2

長い検索の後、関連する投稿をいくつか見つけましたが、探していたものに答えていませんでしたが、まだ混乱しています。私のシナリオでは、5分ごとなどの固定間隔でユーザーの緯度経度をサーバーに送信したいと考えています。これを行うには、独自のプロセスでサービスを使用して、アクティビティが破棄されたときにサービスが強制終了されないようにし、サービス メソッド onStartCommand で、常に true の条件を持つ while ループを使用し、そのループで場所をサーバーに更新し、遅延を与えます以下に示すようにthread.sleep

@Override
    public int onStartCommand(Intent intent, int flags, int startId) {
   While(true)
           {
            Location currentLocation = getLocation();
            updateLocationToServer(currentLocation);
            try
               {
                Thread.sleep(300000)
               }
            catch(Exception e)
               {
                e.printStackTrace()
               }
           }
return Service.START_STICKY;

ここでは、return ステートメントが到達不能であることを理解できません。次に、サービスが破棄されたときにサービスを自動的に再起動し、2 番目に thread.sleep を使用して ANR (Application Not Responding) を引き起こし、サービスがバックグラウンド プロセスであり、UI で直接実行されていることがわかりました。これらの情報は私を混乱させます。この場合、目的の機能を取得するための最良の方法は何ですか。

4

3 に答える 3

3

AlertManager代わりにand を使用する必要があります。

AlarmManager mgr=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i=new Intent(context, OnAlarmReceiver.class);
PendingIntent pi=PendingIntent.getBroadcast(context, 0, i, 0);

mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), PERIOD, pi);

http://justcallmebrian.com/?p=129

于 2012-06-14T12:44:52.707 に答える
1
secondly using thread.sleep causing ANR (Application Not Responding) while service is a background process

http://developer.android.com/reference/android/app/Service.htmlから

サービスは、他のアプリケーション オブジェクトと同様に、ホスティング プロセスのメイン スレッドで実行されることに注意してください。

于 2012-06-14T12:44:41.253 に答える
0

代わりに Alarm Manager を使用してみてください。5 分ごとに繰り返すように設定する方法のこの例を参照してください。

于 2012-06-14T12:45:19.927 に答える