باستخدام المتغيرات المشتركة و/أو متغيرات الفئة في نشاط ما

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

  •  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).

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

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