سؤال

لدي تطبيق Android تم تصميمه بعد LunarLander مثال بواسطة Google. أقوم بتصحيحه على جهاز حقيقي ، (Motorola Droid) مع Android 2.0. عندما يتغير الاتجاه ، يتعطل البرنامج على أ NullPointerException. logcat من قبل تحطم:

02-01 00:24:27.956: DEBUG/nate(8358): Starting Game
02-01 00:24:36.878: DEBUG/dalvikvm(1086): GC freed 1788 objects / 92256 bytes in 1389ms
02-01 00:24:38.542: INFO/WindowManager(1021): Setting rotation to 1, animFlags=0
02-01 00:24:38.558: INFO/ActivityManager(1021): Config changed: { scale=1.0 imsi=310/4 loc=en_US touch=3 keys=2/1/2 nav=2/2 orien=2 layout=34}
02-01 00:24:38.620: WARN/UsageStats(1021): Something wrong here, didnt expect org.nifong.leeder to be resumed
02-01 00:24:38.886: DEBUG/nate(8358): New Surface dimensions: 854x442
02-01 00:24:38.886: DEBUG/nate(8358): flies was null

السطر الأول الذي يقلقني هو "Something wrong here" في 24:38.620. ليس لدي أي فكرة عما يعنيه ذلك ، لكنني أعتقد أنه بسبب عدم الرد بشكل صحيح على تغيير الشاشة.

بعد ذلك ، تلقيت رسالة تصحيح قمت بطباعتها من داخل طريقتي الخاصة surfaceChanged() حول أبعاد السطح الجديدة.

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

هل لدى أي شخص أدنى فكرة عن كيف أصبح متغير الأعضاء الخاص بي لاغيرًا فقط بهذه الأدلة؟

سأقوم بتضمين الكود ولكن هناك الكثير منه ولا أعرف ما الذي سيكون ذا صلة.

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

المحلول 2

لقد أصلحته بإضافة هذين الخطين إلى علامة النشاط في ملف البيان الخاص بي

android:configChanges="keyboardHidden|orientation"
android:screenOrientation="landscape"

هذا يقول أن طلبي سيتعامل مع تغييرات لوحة المفاتيح وتوجيهات الاتجاه من تلقاء نفسها (من خلال عدم القيام بأي شيء) ويفضل الركض في المناظر الطبيعية طوال الوقت.

نصائح أخرى

التغييرات في الاتجاه في Android تؤثر على الحالة. في الأساس ، يتم تدمير نشاطك وإعادة إنشائها. لذلك يجب أن تكون على دراية بما دورة حياة Android سيتم استدعاء الأحداث وكيفية حفظ الدولة.

يجب أن تكون حذرا أيضًا static الحالات وكيف يؤثر ذلك على دورة الحياة هذه.

هنا منشور مدونة شرح بعض هذا.

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