it-swarm.dev

كيفية الخروج من تطبيق Android برمجيًا؟

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

تعرفت أيضًا على أن Activity.moveTaskToBack(true) يمكن أن ينقلك إلى الشاشة الرئيسية. حسنًا ، هذا لا يغلق ولكن يتم وضع خلفية للعملية. فهل هذا فعال؟

ما الطريقة التي يجب استخدامها لإغلاق التطبيق تمامًا؟ أي من الموصوفة أعلاه أو أي طريقة أخرى/استخدام آخر من الأساليب المذكورة أعلاه؟

59
PeakGen

في الواقع يبحث كل واحد عن إغلاق التطبيق في حدث onclick ، ​​أينما كان النشاط ....

حتى أصدقاء الأصدقاء جرب هذا الرمز. ضع هذا الكود على حدث onclick

Intent homeIntent = new Intent(Intent.ACTION_MAIN);
    homeIntent.addCategory( Intent.CATEGORY_HOME );
    homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
    startActivity(homeIntent); 
55
Fayaz

يمكنك الاتصال System.exit ()؛ للخروج من جميع الأنشطة.

    submit=(Button)findViewById(R.id.submit);

            submit.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
Android.os.Process.killProcess(Android.os.Process.myPid());
                    System.exit(1);

                }
            });
40
Anchit Mittal

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

public void onBackPressed() {
  moveTaskToBack(true);
  Android.os.Process.killProcess(Android.os.Process.myPid());
  System.exit(1);
}
31
Pir Fahim Shah
 @Override
    public void onBackPressed() {
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
        alertDialogBuilder.setTitle("Exit Application?");
        alertDialogBuilder
                .setMessage("Click yes to exit!")
                .setCancelable(false)
                .setPositiveButton("Yes",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                moveTaskToBack(true);
                                Android.os.Process.killProcess(Android.os.Process.myPid());
                                System.exit(1);
                            }
                        })

                .setNegativeButton("No", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {

                        dialog.cancel();
                    }
                });

        AlertDialog alertDialog = alertDialogBuilder.create();
        alertDialog.show();
    }
20
Aditya_Android

إنها طريقة سهلة للغاية. استخدم System.exit(0);

17
Amon Olimov

هناك بالفعل حالتان ممكنتان:

  1. قد ترغب في الخروج من النشاط
  2. أو تريد الخروج من التطبيق

يمكنك الخروج من النشاط باستخدام الكود التالي:

var intent = new Intent(Intent.ActionMain);
intent.AddCategory(Intent.CategoryHome);
intent.SetFlags(ActivityFlags.NewTask);
startActivity(intent);
finish();

ولكن هذا لن يقتل الأنشطة الأساسية في نفس التطبيق. هذا سوف يقلل من التطبيق.

إذا كنت ترغب في الخروج من التطبيق ، استخدم الكود التالي لإنهاء العملية:

Android.os.Process.killProcess(Android.os.Process.myPid()); 

لتطوير أحادية مجرد استخدام

process.KillProcess(Process.MyPid());
12
Kasun

منذ api 16 ، يمكنك استخدام طريقة finishAffinity ، والتي تبدو قريبة جدًا من إغلاق جميع الأنشطة ذات الصلة باسمها ووصف javadoc:

this.finishAffinity();

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

لاحظ أن هذه النهاية لا تسمح لك بتسليم النتائج إلى النشاط السابق ، وسيتم طرح استثناء إذا كنت تحاول القيام بذلك.


منذ api 21 يمكنك استخدام أمر مشابه جدا

finishAndRemoveTask();

انتهاء جميع الأنشطة في هذه المهمة وإزالتها من قائمة المهام الحديثة.

البدائل:

getActivity().finish();
System.exit(0);


int pid = Android.os.Process.myPid();
Android.os.Process.killProcess(pid);


Process.sendSignal(Process.myPid(), Process.SIGNAL_KILL);


Intent i = new Intent(context, LoginActivity.class);
i.putExtra(EXTRA_EXIT, true);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(i);

المصدر: كيفية إنهاء تطبيق Android برمجياً


آمل أن يساعد! حظا سعيدا!

10
Shreshth Kharbanda
Android.os.Process.killProcess(Android.os.Process.myPid());
5
kathir

ماذا عن this.finishAffinity()

من المستندات ،

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

5
Akeshwar Jha

استخدم this.finishAffinity () ؛ على هذا الزر بدلاً من النهاية () ؛ إذا لم ينجح الأمر ، فيمكنك أيضًا محاولة إضافة Android: noHistory = "true" في البيان الخاص بك ثم إنهاء نشاطك عن طريق uisng finish ()؛ أو finishAffinity () ؛

آمل أن يساعد .... :)

3
Yesha Shah
 @Override
    public void onBackPressed() {
        Intent homeIntent = new Intent(Intent.ACTION_MAIN);
        homeIntent.addCategory( Intent.CATEGORY_HOME );
        homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(homeIntent);
    }
3
azeem khan

جرب هذا على مكالمة. أنا في بعض الأحيان استخدامه في onClick من زر.

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

بدلاً من إغلاق التطبيق الخاص بك ، يفتح لوحة القيادة بحيث يبدو نوع التطبيق مغلقًا.

اقرأ هذا السؤال لمزيد من الوضوح Android - كود تطبيق الخروج

2
Rishiraj Purohit

تحقيق في Xamarin.

    public override void OnBackPressed()
    {
        MoveTaskToBack(true);
        Process.KillProcess(Process.MyPid());
        Environment.Exit(1);
    }
2
GONeale

سيؤدي ذلك إلى مسح المهمة (كومة من الأنشطة) وبدء مهمة جديدة

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
System.exit(1);
2
Mahmood Ali

ضع هذا في onClick الخاص بك:

moveTaskToBack(true);
    finish()
2
Stan Malcolm

إذا كان شخص ما زال يتساءل ، فبالنسبة إلى Xamarin.Android (في حالتي أيضًا Monogame تعمل عليه) ، فإن الأمر FinishAndRemoveTask() on Activity يقوم بالعمل جيدًا!

1
Konrad

وهي تعمل فقط باستخدام moveTaskToBack(true);

1
user3856297

نشاط شبح يسمى بـ singletop و finish () على onCreate يجب أن يقوم بالخدعة

1
JesusS

بدلاً من System.exit (1) فقط استخدم System.exit (0)

0
Kaze Tdr

إذا كنت تستخدم كل من النهاية والخروج ، فسيغلق التطبيق الخاص بك تمامًا

إنهاء()؛

System.exit (0)؛

0
Abdullah alkış

إذا كنت تستخدم EventBus (أو في الحقيقة أي مكتبة/حانة فرعية أخرى) في التطبيق الخاص بك للاتصال بين الأنشطة ، يمكنك إرسال حدث صريح إليهم:

final public class KillItWithFireEvent
{
    public KillItWithFireEvent() {}

    public static void send()
    {
        EventBus.getDefault().post(new KillItWithFireEvent());
    }
}

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

0
Grzegorz Adam Hankiewicz

في الشظية

. getActivity () finishAndRemoveTask ()؛

في النشاط

finishAndRemoveTask ()؛

0
Rodrigo Givisiez
Just call these two Function

 finish();
 moveTaskToBack(true);
0
younes

فقط أضف هذا الكود: -

@Override
    public void onBackPressed() {
        finish();
        super.onBackPressed();
    }
0
Sandeep Malik

فقط قم بتشغيل السطرين أدناه عندما تريد الخروج من التطبيق

Android.os.Process.killProcess(Android.os.Process.myPid());
System.exit(1);
0
Hassnain Jamil