English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

طريقة إغلاق جميع activities في تطوير android

عندما يتم فتح عدة activities في التطبيق، بسبب العمق الذي يدخل فيه، فإن العديد من التطبيقات لا تستطيع إلا أن تجعل المستخدم يرجع خطوة بخطوة إلى واجهة المستخدم الأولى (MainActivity)، ويتم إطلاق كل منها خطوة بخطوة أثناء الرجوع.

اليوم، سأكتب في Kotlin لتحقيق خروج مباشر من التطبيق في أي مكان.

أولاً، يجب أن يكون هناك مكان للسجلات كل مرة يتم فتح activity، حتى تتمكن حلقة من مرور عبر جميع resources المستخدمة من قبل activities.

إذن، قم بإنشاء حلقة. يستخدم MutableList لأن لديه طرق add و remove، وهو مفيد جدًا.

var activities:MutableList<Activity> = arrayListOf()

تستخدم هذه الحلقة لتسجيل عدد activities المفتوحة حاليًا.

لذلك، يجب تنفيذ إجراء إضافة إلى هذه الحلقة كل مرة يتم فتح activity جديدة.

fun ActivityAdd(activity:Activity){
  activities.add(activity)
}

ثم يأتى دور العمل الأساسي، وهو إطلاق جميع activities.

أولاً، يجب مرور عبر الحلقة، والتحقق مما إذا كانت activity التى مرت عبرها null، إذا لم تكن null، فهذا يعني أن هذه activity لم تُفرج عنها بعد، لذا يجب إنهاء هذه activity. ثم إزالتها من الحلقة.

fun ActivityFinishAll(){
  for (activity:Activity in activities){
    if (activity != null){
      activity.finish()
      activities.remove(activity)
    }
  }
}

لم ينتهِ الأمر بعد، يجب تنفيذ إضافة动作 إلى المجموعة في كل activity عند onCreate

ActivityAdd(this)

فإكتب في داخـل override fun onCreate(savedInstanceState: Bundle?)

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    ActivityAdd(this)
    ...
  }

بالطبع، هذا ليس كافياً، نحتاج أيضًا إلى تحقيق إزالة activity بشكل فردي.

fun ActivityRemove(activity: Activity){
  activities.remove(activity)
}

بهذا نحصل على الميزات الأساسية.

PS: آخرطريقة إغلاق activity

أربعة طرق لإغلاق activity الحالية

// طريقة إغلاق activity الحالية الأولى 
  finish(); 
// طريقة إغلاق الشاشة الحالية الثانية 
  android.os.Process.killProcess(android.os.Process.myPid());    
// طريقة إغلاق الشاشة الحالية الثالثة 
  System.exit(0);  
// طريقة إغلاق الشاشة الحالية الرابعة 
  this.onDestroy(); 

لكن إذا تم إطلاق أربعة Activities: A،B،C وD،

في Activity D، أريد إطلاق Activity B أخرى، ولكن لا أريد أن يصبح A،B،C،D،B، بل أريد أن يكون A،B، وأن تتم حفظ البيانات على B

Intent intent = new Intent(); 
intent.setClass(TableActivity.this, FrameActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); // تعيين عدم تحديث الشاشة التي سيتم الانتقال إليها 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//它可以关掉所要到的界面中间的activity 
startActivity(intent); 

إذا تم إطلاق أربعة Activities: A،B،C وD،

في Activity D، أريد إطلاق Activity B أخرى، ولكن لا أريد أن يصبح A،B،C،D،B، بل أريد أن يكون A،B، وأن لا تتم حفظ البيانات على B

Intent intent = new Intent(); 
intent.setClass(TableActivity.this, FrameActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//它可以关掉所要到的界面中间的activity 
startActivity(intent); 

如果已经启动了四个Activity:A,B,C和D,在D Activity里,想再启动一个 Activity B,但不变成A,B,C,D,B,而是希望是A,C,D,B,则可以像下面写代码:

Intent intent1 = new Intent(TableActivity.this, FrameActivity.class);  
intent1.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);   
startActivity(intent1);  

如果已经启动了四个Activity:A,B,C和D,在D Activity里,想要一次性关闭所有的activity

创建一个专门用来处理activity的类

package com.layout;  
import java.util.LinkedList;  
import java.util.List;  
import android.app.Activity;  
import android.app.Application;  
/** 
 * 一个类 用来结束所有后台activity 
 * @author Administrator 
 * 
 */ 
public class SysApplication extends Application { 
  //运用list来保存们每一个activity是关键 
  private List<Activity> mList = new LinkedList<Activity>(); 
  //为了实现每次使用该类时不创建新的对象而创建的静态对象 
  private static SysApplication instance;  
  //构造方法 
  private SysApplication(){} 
  //实例化一次 
  public synchronized static SysApplication getInstance(){  
    if (null == instance) {  
      instance = new SysApplication();  
    }  
    return instance;}  
  }  
  // أضف Activity  
  public void addActivity(Activity activity) {  
    mList.add(activity);  
  }  
  //إغلاق كل activity داخل القائمة 
  public void exit() {  
    try {  
      for (Activity activity:mList) {  
        if (activity != null)  
          activity.finish();  
      }  
    }  
      e.printStackTrace();  
    }  
      System.exit(0);  
    }  
  }  
  //قتل العملية 
  public void onLowMemory() {  
    super.onLowMemory();    
    System.gc();  
  }  
} 

أضف هذا في كل وقت يتم إنشاء activity

SysApplication.getInstance().addActivity(this); 

أضف هذا الـ activity إلى القائمة.

عندما تريد إغلاق البرنامج، قم بتشغيل طريقة exit الخاصة بـ SysApplication

//إغلاق البرنامج بأكمله 
SysApplication.getInstance().exit()

هذا هو محتوى المقال كله، آمل أن يكون قد ساعدكم في التعلم، وأتمنى أن تشجعوا دليل التدريب.

بيان: محتوى هذا المقال تم جمعه من الإنترنت، وهو ملك لمالك المشارك، ويتم توفيره من قبل المستخدمين على الإنترنت الذين قاموا بتحميله. هذا الموقع لا يملك حقوق الملكية، ولا يتم تعديل المحتوى بشكل إنساني، ولا يتحمل أي مسؤولية قانونية. إذا وجدت محتوى يشتبه في حقوق النسخ، فلا تتردد في إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال # بـ @). يرجى تقديم الأدلة ذات الصلة، وسيتم حذف المحتوى المزعوم فور التحقق منه.

أنت قد تعجبك