سؤال

لدي هذه المشكلة في الروبوت.لدي النشاط الرئيسي الذي يدعو موضوع مع هذا

   Runnable work = new Runnable() {

    public void run() {
        while (kill) {
            try {
                Thread.sleep(5000);
                connect();
                } catch (InterruptedException ex) {
                Logger.getLogger(MainActivity.class.getName()).log(Level.SEVERE, null, ex);
            }
        }


    }
};

اقتلها منطقية عامة في النشاط الرئيسي.ما الذي يمكنني فعله لحفظ الخيط ، لذلك عندما أستأنف النشاط ، ما زلت أستطيع قتل الخيط?

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

المحلول

أعتقد أنك تريد أن تفعل شيئا أقرب إلى ما هذا الحل يقترح.

ومع ذلك ، إذا كنت تريد حقا الاستمرار في القيام بذلك في Thread, ، ثم أقترح عليك تمديد فئة جديدة من Thread وإضافة طريقة تسمى killMe().سيؤدي هذا إلى تعديل (الآن خاص) منطقية kill العلم.ثم ، في الخاص بك onRetainNonConfigurationInstance() يمكنك إرجاع هذا Thread ويمكنك استرجاعها مرة أخرى في onResume.إذا عدت ولم يقتل النشاط ، فلا بأس، يمكنك فقط الاتصال killMe() على القائمة Thread.

مثال:

 @Override
  public Object onRetainNonConfigurationInstance() {
    return thread;
  }

نصائح أخرى

لماذا تريد إنهاء الموضوع في السيرة الذاتية؟

لماذا لا تبدأ مؤشر الترابط في جزء الاستئناف ، ثم ضع كتلة أخيرًا للتعامل مع حقيقة أن رمز الترقيم العام تمت مقاطعته ، وبعد ذلك عندما يبدأ مرة أخرى ، تحتاج فقط إلى إعادة الاتصال والقيام بالعملية.

في حالة الأجهزة المحمولة ، فإن أفضل رهان لك هو وضع علامة في بعض وحدات التخزين الثابتة أينما كنت ، بحيث إذا تمت مقاطعتك ، يمكنك المتابعة عند بدء تشغيل رمز الترميز العام مرة أخرى.

لديك احتمالية كبيرة للمقاطعة ، لذا صممها لذلك

قد يتم قتل الخيط بواسطة نظام التشغيل لذلك لا يوجد شيء لحفظه وقتله لاحقًا.

إذا كنت حقًا بحاجة إلى القيام بشيء من هذا القبيل ، فابدأ باستخدام رمز ترميز عام حيث سيتم تشغيله في عملية مختلفة عن رمز الترميز العام ومن المرجح أن يظل موجودًا.

ربما تريد إلقاء نظرة على هذا السؤال:

خدمة Android عن بُعد

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