كيف يمكنني الحفاظ على موضوع خدمة النوايا على قيد الحياة?

StackOverflow https://stackoverflow.com//questions/11700288

سؤال

أنا أكتب تطبيق الاختبار الذي يتتبع موقع المستخدمين.الفكرة هي أنه يمكنني بدء خدمة تسجل بعد ذلك لتحديثات الموقع.الآن أنا باستخدام إنتنتسرفيس لذلك.

رمز الخدمة (الذي لا يعمل...) يبدو مثل هذا:

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;
}

}

حاليا الشيء الوحيد الذي يحدث هو إخراج " الذهاب إلى النوم...".أحتاج إلى بعض الآلية التي تحافظ على مؤشر الترابط على قيد الحياة (لأن المستمع لا يمكن الوصول إليه بعد الآن للحصول على تحديثات الحالة) ولا يضيع وقت وحدة المعالجة المركزية (أعتقد أن الحلقات المزدحمة ليست الطريقة المفضلة).حتى لو كان هناك طن من الطرق الأخرى كيفية تحقيق سلوك التطبيق (تسجيل إحداثيات غس) أنا مهتم في حل لهذه الطريقة لتعلم تقنية لحل المشاكل من هذا النوع!

هل كانت مفيدة؟

المحلول

كيف يمكنني الحفاظ على موضوع خدمة النوايا على قيد الحياة?

أنت لا.أنت لا تستخدم IntentService في سيناريو مثل هذا.

أحتاج إلى بعض الآلية التي تحافظ على مؤشر الترابط على قيد الحياة (لأن المستمع لا يمكن الوصول إليه بعد الآن للحصول على تحديثات الحالة) ولا يضيع وقت وحدة المعالجة المركزية (أعتقد أن الحلقات المزدحمة ليست الطريقة المفضلة)

لا ، في هذه الحالة أ Service على ما يرام ، لأنك تتحكم عندما تذهب الخدمة بعيدا ، يمكنك التحكم في عمر أي المواضيع التي تقوم بإنشائها ، الخ. IntentService غير مناسب للغرض المقصود ، لأن ذلك مراقبة عندما تكون الخدمة تسير بعيدا و ذلك يتحكم في عمر الخيوط.

نصائح أخرى

فكر في استخدام الخدمات النائية .عملت بالنسبة لي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top