Mehrere Möglichkeiten, APP auf Android schnell zu beenden

Methode eins

Durch Einstellen der Hauptaktivität auf den SingleTask-Modus wird sichergestellt, dass bei jedem Start der Hauptaktivität dieselbe Instanz verwendet wird, wodurch die Speichernutzung verbessert wird . In der Exit-Aktivität können Sie über Intent zur Hauptaktivität zurückkehren und die onNewIntent-Methode der Hauptaktivität neu schreiben, indem Sie einen Finish()-Satz hinzufügen, um sie zu beenden.

  1. Legen Sie die Hauptaktivität in der Datei AndroidManifest.xml auf den SingleTask-Modus fest:
<activity android:name=".MainActivity"
          android:launchMode="singleTask">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
  1. Kehren Sie in der beendeten Aktivität über Intent zur Hauptaktivität zurück:
public class ExitActivity extends AppCompatActivity {
    
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_exit);

        Button btnExit = findViewById(R.id.btn_exit);
        btnExit.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                Intent intent = new Intent(ExitActivity.this, MainActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
            }
        });
    }
}
  1. Schreiben Sie die onNewIntent-Methode in MainActivity neu und fügen Sie einen Finish()-Satz hinzu:
public class MainActivity extends AppCompatActivity {
    
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MyApplication.getInstance().addActivity(this);
    }

    @Override
    protected void onNewIntent(Intent intent) {
    
    
        super.onNewIntent(intent);
        finish();
    }
}

Auf diese Weise wird jedes Mal, wenn Sie zur Hauptaktivität zurückkehren, die vorherige Instanz geschlossen, um die Speichernutzung sicherzustellen.

Methode 2

Die Exit-Funktion wird durch Broadcast abgeschlossen. Beenden Sie den Broadcast, nachdem Sie ihn akzeptiert haben.
Die Funktion zum Beenden der Anwendung kann durch Senden eines benutzerdefinierten Broadcasts implementiert werden. Die spezifischen Implementierungsschritte sind wie folgt:

  1. Fügen Sie eine Methode zum Senden von Broadcasts in MyApplication hinzu:
public void sendExitBroadcast() {
    
    
    Intent intent = new Intent("com.example.exit");
    sendBroadcast(intent);
}
  1. Rufen Sie die Methode MyApplication.getInstance().sendExitBroadcast() dort auf, wo Sie die Anwendung beenden müssen, um eine Übertragung zu senden:
public class ExitActivity extends AppCompatActivity {
    
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_exit);

        Button btnExit = findViewById(R.id.btn_exit);
        btnExit.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                MyApplication.getInstance().sendExitBroadcast();
            }
        });
    }
}
  1. Registrieren Sie einen Rundfunkempfänger in MyApplication und verlassen Sie die Anwendung nach dem Empfang der Sendung:
public class MyApplication extends Application {
    
    

    private static MyApplication instance;
    private Stack<Activity> activityStack;
    private BroadcastReceiver exitReceiver;

    private MyApplication() {
    
    
        activityStack = new Stack<>();
    }

    public static synchronized MyApplication getInstance() {
    
    
        if (instance == null) {
    
    
            instance = new MyApplication();
        }
        return instance;
    }

    public void addActivity(Activity activity) {
    
    
        activityStack.push(activity);
    }

    public void exit() {
    
    
        while (!activityStack.isEmpty()) {
    
    
            Activity activity = activityStack.pop();
            activity.finish();
        }
        System.exit(0);
    }

    public void sendExitBroadcast() {
    
    
        Intent intent = new Intent("com.example.exit");
        sendBroadcast(intent);
    }

    @Override
    public void onCreate() {
    
    
        super.onCreate();

        exitReceiver = new BroadcastReceiver() {
    
    
            @Override
            public void onReceive(Context context, Intent intent) {
    
    
                exit();
            }
        };
        registerReceiver(exitReceiver, new IntentFilter("com.example.exit"));
    }

    @Override
    public void onTerminate() {
    
    
        super.onTerminate();
        unregisterReceiver(exitReceiver);
    }
}

Auf diese Weise empfängt der Broadcast-Empfänger in MyApplication beim Senden der Broadcast die Broadcast und beendet die Anwendung.

Methode drei

Definieren Sie einen Stapel, schreiben Sie eine benutzerdefinierte MyApplication, verwenden Sie den Singleton-Modus, um die Aktivität unabhängig zu verwalten, und rufen Sie MyApplication.getInstance().addActivity(this) in der onCreate()-Methode jeder Aktivität auf, um bei Bedarf die aktuelle Aktivität zum Stapel hinzuzufügen Wenn Sie die Anwendung beenden, können Sie die Methode MyApplication.getInstance().exit() aufrufen, um die Anwendung vollständig zu beenden.
Wenn Sie den Vorgang beenden müssen, schleifen Sie einfach die in den Stapel verschobenen Aktivitäten nacheinander aus.
Das Folgende ist der Implementierungscode:

public class MyApplication extends Application {
    
    

    private static MyApplication instance;
    private Stack<Activity> activityStack;

    private MyApplication() {
    
    
        activityStack = new Stack<>();
    }

    public static synchronized MyApplication getInstance() {
    
    
        if (instance == null) {
    
    
            instance = new MyApplication();
        }
        return instance;
    }

    public void addActivity(Activity activity) {
    
    
        activityStack.push(activity);
    }

    public void exit() {
    
    
        while (!activityStack.isEmpty()) {
    
    
            Activity activity = activityStack.pop();
            activity.finish();
        }
        System.exit(0);
    }
}

Rufen Sie MyApplication.getInstance().addActivity(this) in der onCreate()-Methode jeder Aktivität auf:

public class MainActivity extends AppCompatActivity {
    
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MyApplication.getInstance().addActivity(this);
    }
}

Wenn Sie die Anwendung beenden müssen, rufen Sie die Methode MyApplication.getInstance().exit() auf:

public class ExitActivity extends AppCompatActivity {
    
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_exit);

        Button btnExit = findViewById(R.id.btn_exit);
        btnExit.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                MyApplication.getInstance().exit();
            }
        });
    }
}

Supongo que te gusta

Origin blog.csdn.net/ChenYiRan123456/article/details/130943129
Recomendado
Clasificación