Activity四种启动模式的特点

本文详细介绍了Android中Activity的四种启动模式:standard、singleTop、singleTask和singleInstance的特点及应用场景,并通过示例代码展示了如何在项目中实现Activity之间的切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.Activity四种启动模式的特点

1.standard模式

 Activity默认的启动模式,依次入栈出栈,满足"先进后出"的原则。这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加

2.singleTop模式

 当启动的Activity已经位于栈顶,则直接使用它不创建新的实例。如果没有则创建新的实例。

 3.singleTask模式

 如果希望Activity在整个应用程序中只存在一个实例,可以使用该模式。每次启动该Activity时,系统首先会检查栈中是否存在该

 Activity的,如果发现已经存在则直接使用,并将当前Activity之上的所有Activity出栈。

 4.singleInstance模式

 该模式加载Activity时,无论从哪个任务栈中启动该Activity,只会创建一个Activity实例,并且会使用一个全新的任务栈来装载该Activity实例。

二.Activity三种界面切换。

1.建立如图所示资源文件。


2.在MainActivity中

package com.example.administrator.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void click1(View view) {
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
        Log.i("Tag", "页面一 taskId:" + getTaskId());
    }
    public void click2(View view) {
        Intent intent = new Intent(this, Main2Activity.class);
        startActivity(intent);
        Log.i("Tag", "页面二 taskId:" + getTaskId());
    }
    public void click3(View view) {
        Intent intent = new Intent(this, Main3Activity.class);
        startActivity(intent);
        Log.i("Tag", "页面三 taskId:" + getTaskId());
    }
}


3.在activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.administrator.myapplication.MainActivity"
    android:onClick="click1">

    <Button
        android:text="第一个页面"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="click1"
     />
    <Button
        android:text="第二个页面"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="click2"
        />
    <Button
        android:text="第三个页面"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="click3"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         android:textSize="50sp"
        android:text="第一个页面" />

</LinearLayout>
4.在AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.administrator.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".Main2Activity"></activity>
        <activity android:name=".Main3Activity"></activity>

    </application>

</manifest>
5.完成


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值