قتل موضوع بعد استئناف النشاط الرئيسي?
-
28-10-2019 - |
سؤال
لدي هذه المشكلة في الروبوت.لدي النشاط الرئيسي الذي يدعو موضوع مع هذا
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;
}
نصائح أخرى
لماذا تريد إنهاء الموضوع في السيرة الذاتية؟
لماذا لا تبدأ مؤشر الترابط في جزء الاستئناف ، ثم ضع كتلة أخيرًا للتعامل مع حقيقة أن رمز الترقيم العام تمت مقاطعته ، وبعد ذلك عندما يبدأ مرة أخرى ، تحتاج فقط إلى إعادة الاتصال والقيام بالعملية.
في حالة الأجهزة المحمولة ، فإن أفضل رهان لك هو وضع علامة في بعض وحدات التخزين الثابتة أينما كنت ، بحيث إذا تمت مقاطعتك ، يمكنك المتابعة عند بدء تشغيل رمز الترميز العام مرة أخرى.
لديك احتمالية كبيرة للمقاطعة ، لذا صممها لذلك
قد يتم قتل الخيط بواسطة نظام التشغيل لذلك لا يوجد شيء لحفظه وقتله لاحقًا.
إذا كنت حقًا بحاجة إلى القيام بشيء من هذا القبيل ، فابدأ باستخدام رمز ترميز عام حيث سيتم تشغيله في عملية مختلفة عن رمز الترميز العام ومن المرجح أن يظل موجودًا.
ربما تريد إلقاء نظرة على هذا السؤال: