どのようにしてインテントサービスのスレッドを生かしますか?
-
13-12-2019 - |
質問
私はユーザーの場所を追跡するテストアプリケーションを書いています。アイデアは、私が場所の更新を登録するサービスを開始できるということです。今のところ私はそのためのインテントサービスを使っています。
サービスコード(機能していない...)のように見えます。
public class GpsGatheringService extends IntentService {
// vars
private static final String TAG = "GpsGatheringService";
private boolean stopThread;
// constructors
public GpsGatheringService() {
super("GpsGatheringServiceThread");
stopThread = false;
}
// methods
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "onStartCommand()");
return super.onStartCommand(intent, flags, startId);
}
@Override
protected void onHandleIntent(Intent arg0) {
// this is running in a dedicated thread
Log.d(TAG, "onHandleIntent()");
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
LocationListener locationListener = new LocationListener() {
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
Log.d(TAG, "onStatusChanged()");
}
@Override
public void onProviderEnabled(String provider) {
Log.d(TAG, "onProviderEnabled()");
}
@Override
public void onProviderDisabled(String provider) {
Log.d(TAG, "onProviderDisabled()");
}
@Override
public void onLocationChanged(Location location) {
Log.d(TAG, "onLocationChanged()");
}
};
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
while (!stopThread) {
try {
Log.d(TAG, "Going to sleep...");
Thread.sleep(1500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy()");
stopThread = true;
}
.
}
現在起こる唯一のものは、「寝る」の出力です。私はスレッドをauliveに保つメカニズムが必要です(他のリスナーがステータスアップデートではもう到達できないため)、CPU時間を無駄にしませんでした(私は忙しいループは推奨される方法ではありません)。 他にトンがある場合でも、アプリケーションの行動を実現する方法(GPS座標のロギング)この自然の問題を解決するための手法を学ぶためのこの方法の解決策に興味があります!
解決
アジアブスのスレッドをどのように保ちますか?
あなたはしません。このようなシナリオでIntentService
を使用しません。
私はスレッドを生かし続けるメカニズムが必要です(他のリスナーがステータスアップデートではもう到達できないため)、CPUの時間を無駄にしませんでした(私は忙しいループが好ましい方法ではないと思います)
いいえ、この場合、Service
は大丈夫です、あなたがサービスが去っているときに制御するので、あなたが作成したスレッドなどの任意のスレッドの有効期間を制御します.IntentService
はあなたの意図された目的には不適切です。EM>サービスが消えているときにコントロールし、 IT はスレッドの存続期間を制御します。
他のヒント
リモートサービス。それは私のために働いた。
所属していません StackOverflow