سؤال

وأنا اتلقى حاليا على السيطرة على الروبوت، ولعب حولها مع عينة القمرية لاندر.

ولقد وجدت أن إذا انتقلت بعيدا عن التطبيق (على سبيل المثال، وضرب على زر الاتصال) فإنه سيتم تدمير (surfaceDestroyed الدعوة) السطح الأساسي.

والتنقل إلى الخلف (والذي من شأنه أن يؤدي onWindowVisibilityChanged) فإن التطبيق تحطم، لأنها سوف محاولة لرسم على سطح دون إعادة عليه.

هل هناك بعض التعليمات البرمجية I يمكن وضعها في onWindowVisibilityChanged (أو في أي مكان آخر) التي من شأنها تجديد سطح الأساسي للSurfaceView واستئناف التنفيذ بشكل جيد؟

وبدا الامر وكأننا هذا ينبغي أن يكون استدعاء دالة بسيطة ولكن لا أستطيع أن أجد أي شيء في مستندات API.

وشكرا!

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

المحلول 2

وميس التشخيص! التطبيق إعادة يخلق السطح تلقائيا، ولكن هناك مكالمة هناك الذي يحاول رسم لها قبل إنشائه.

وتحديد المشكلة:

boolean mSurfaceExists;
...
public void surfaceDestroyed(SurfaceHolder holder) {
    mSurfaceExists = false;
    ...
}

public void surfaceCreated(SurfaceHolder holder) {
    mSurfaceExists = true;
    ...
}

protected void onWindowVisibilityChanged(int visibility) {
    // only call base if there's a surface
    if(mSurfaceExists)
        super.onWindowVisibilityChanged(visibility);
}

والآن كل شيء تضخم. (بقدر ما أنا على علم، على أي حال - جافا / خبراء الروبوت لا تتردد في التعليق إذا كان هذا هو ممارسة سيئة)

نصائح أخرى

وهذا الحل ل "mSurfaceExists = صحيح" لا يعمل بالنسبة لي سواء. يبدو surfaceCreated () لا يحصل دعا لأن لا يسمى super.onWindowVisibilityChanged (). حتى لا يكون هناك أي سطح خلق وأنها لا تعطل لأن لا يسمى threas.start.

وأعتقد أن المشكلة هي: داعيا thread.start () يتسبب في حدوث الخطأ لأن موضوع بدأ بالفعل. ولكن في surfaceDestroyed ()، thread.join يتسبب في موضوع لاستكمال ويموت. وموضوع لا يمكن إعادة تشغيل مرة واحدة القتلى.

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

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

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