Android: استعادة النشاط النشط أثناء استئناف التطبيق

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

  •  05-09-2019
  •  | 
  •  

سؤال

لدي نشاطان يعملان: النشاط الرئيسي و السرية. وبعد كلما نقر المستخدم في الزر في النشاط الرئيسي, ، ال السرية إطلاق. ما أريد القيام به هو:

عندما يكون النشاط النشط هو السرية والمستخدم النقر على زر الصفحة الرئيسية ثم إعادة تشغيل التطبيق, ، أريد أن أرى السرية بدلا من النشاط الرئيسي التي تم إطلاقها.

كان لدي بعض الاقتراحات تعمل بالفعل حولها. حاولت التعامل مع OnStart، Onrestart، Onresume، Onstop، Endestroy الأحداث. ولكن، لم يحل المشكلة تماما. يجب أن يكون هناك مخرج ذكي هناك. شكرا لك.

يحرر:

شكرا لك على الإجابة، قرون. القضية التي قلتها تحدث عندما يتم استدعاء النشاط من نافذة الأنشطة الحديثة. (فتحت النافذة عند الضغط لفترة طويلة على زر الصفحة الرئيسية) ولكن لا يحدث هذا عند فتحه من الشاشة الرئيسية. (مثل الفتح من البداية) لا أعتقد أن الكود الخاص بي لديه مشكلة محددة لإنشاء هذا الخطأ. لأنه، قمت بإنشاء مشروع اختبار وحاول مستقل قبل إرسال السؤال ويواجه نفس المشكلة. Anyhow، هنا هو رمز الاختبار:

public class MainActivity extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        this.setTitle("MainActivity");

        ((Button) findViewById(R.id.btnChildActivity)).setOnClickListener(this);
    }

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        startActivity(new Intent(this, ChildActivity.class));
    }

}

public class ChildActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main2);
        this.setTitle("ChildActivity");

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

المحلول

تعديل: وجدت الحل لمشكلتك بشكل عشوائي إلى حد ما اليوم! انظر الى هذا تقرير الخطأ. وبعد يشرح مشكلتك بالضبط. السبب في أنني لم أستطع إعادة إنتاج المشكلة هو أنني لم أحصل على تطبيق Eclipse أبدا. يمكنني استخدام Eclipse لتثبيت التطبيق ثم ابدأ تشغيله بنفسي.


هذا هو بالفعل السلوك الافتراضي لتطبيقات Android، لا يلزم وجود حيل خاصة لتحقيق ذلك. أنا مندهش التطبيق الخاص بك لا يظهر هذا السلوك. يحتفظ كل تطبيق Android بمكدس نشاط، حرفيا كومة من الأنشطة Lifo. يمكن تجميع هذه الأنشطة أيضا في مهام، لكن 99٪ من تطبيقات الدنيوية لن تحتاج إلى معرفة أي شيء عن المهام في تجربتي.

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

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

نصائح أخرى

عدت واختبارها واختبارها مع تطبيق مماثل، وحتى عندما يتم إجبار العملية على الخروج من الذاكرة يتم إعادة تشكيل عملية السرية تلقائيا كما يقول قرون. هل ترى هذا على المحاكي أو على جهاز حقيقي؟

إذا قمت بتشغيل تطبيقك ومشاهدة Logcat، يجب أن ترى شيئا مثل ما يلي بعد تشغيل التطبيق الخاص بك، ثم افتح عملية السرية وانقر فوق الصفحة الرئيسية ثم قم بتشغيل نشاطك مرة أخرى:

نشاط البدء: النية {action = android.intent.action.main الفئات = {android.intent.categroy.launcher} flags = ... comp = {com.yourpackagename.mainactivity}} البدء في بروك لنشاط yourpackagename.childactivity: PID = X UID = Y SWIDS = {} عرض النشاط /.Childactivity

هل يمكنك نشر إخراج logcat عندما لا ترى السلوك الذي تتوقعه؟

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