باستخدام المتغيرات المشتركة و/أو متغيرات الفئة في نشاط ما
-
26-09-2019 - |
سؤال
مجرد سؤال عشوائي. أنا أتعلم القليل من Android في الوقت الحالي ، وفي معظم الأمثلة ، يبدو أن هناك الكثير من العناصر الشائعة (مثل الأزرار ، مربعات التحرير ، إلخ). (cast) findViewById()
.
هل تعتبر ممارسة جيدة أو سيئة لتخزين نتيجة ذلك في قيم أعضاء النشاط؟ مثال بسيط:
public class MyActivity extends Activity {
private EditText myText;
public void onCreate(blah blah) {
// blah
this.myText = (EditText) findViewById(R.id.mytext);
}
}
واستخدم حقل mytext من هناك. أعتقد أنه سيكون من الجيد للأداء (اعتمادًا على أعمال FindViewById الداخلية ، أنا متأكد تمامًا من أنها سريعة جدًا بالفعل) ، لكنني لم أرها يتم تشجيعها بعد. وأيضًا ، لن تكون هذه هي المرة الأولى التي واجهت فيها موقفًا حيث يؤدي التخزين المؤقت "إلى مشكلات (كان لها حالة لم يتم إصدار اتصالات قاعدة البيانات بشكل صحيح لأنني تذكرت أ ConnectionManager
أو شيء من هذا القبيل).
ثانياً ، مرتبط إلى حد ما ، إذا كنت تريد أن تتذكر شيئًا عبر الأساليب في نشاطك (وبعد ذلك أيضًا ، عند إعادة تشغيل النشاط لاحقًا) ، هل من الحكمة الحفاظ في كل مرة لإعداد / الحصول على القيمة حيث تحتاج إلى حل أفضل؟ (من الأفضل أن تكون أكثر نظافة ، دون التأثير على الأداء بشكل كبير)
المحلول
هذه ممارسة طبيعية تمامًا وهي بالضبط ما يجب أن تفعله. إذا كنت قلقًا بشأن تسرب الذاكرة ، أو عقد مراجع أو أي شيء آخر ، فلا تشعر بالقلق من ذلك عند التعامل مع وجهات النظر.
ومع ذلك ، يجب أن تكون حذراً بشأن عقد الإشارات إلى سياقات أخرى لأن ذلك قد يتسبب في تسرب الذاكرة. هذا لا يعني أنه يجب ألا تفعل ذلك ، فقط كن حذرًا عند قيامك بذلك.
is it wiser to keep up both a class field and a value in SharedPreferences, or would calling SharedPreferences each time for setting / getting the value where it's needing be a better solution?
يجب أن تفعل كليهما. يجب عليك الاحتفاظ بمتغير عضو عندما تحتاج فقط إلى قراءة البيانات ، فقط تأكد من أنه عند الكتابة إلى متغير العضو ، يمكنك أيضًا تغيير التفضيل المشترك.
Also, it wouldn't be the first time I encountered a situation where 'caching' something like this leads to problems (had a case where database connections weren't released properly because I remembered a ConnectionManager or something in that fashion).
هذا ما كنت أقوله أولاً. كل هذا يتوقف على ما تخزينه. طرق العرض جيدة للتخزين ، ويمكن أن تكون السياقات خطرة ، ويمكن أن تسبب اتصالات قاعدة البيانات والمستمعين المسجلين أخطاء غريبة حقًا. كل هذا يتوقف على الحالة المحددة.