Giới thiệu
Ví dụ này minh họa cách đưa một Activity đã tồn tại trong back stack lên foreground (trở thành activity trên cùng) thay vì tạo instance mới, sử dụng flag Intent.FLAG_ACTIVITY_REORDER_TO_FRONT.
Bước 1: Tạo dự án mới
Tạo project Android Studio: File → New Project.
Bước 2: Layout MainActivity (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Bước 3: MainActivity - Khởi động MyActivity với flag REORDER_TO_FRONT
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent i = new Intent(this, MyActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(i);
}
}
Bước 4: Tạo MyActivity (MyActivity.java)
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class MyActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_acitivity);
}
}
Bước 5: Layout MyActivity (activity_myacitivity.xml)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MyActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="MYACTIVITY"
android:layout_centerInParent="true"
android:textAlignment="center"
android:textSize="24sp"
android:textStyle="bold"/>
</RelativeLayout>
Bước 6: Manifest - Khai báo cả 2 Activity
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MyActivity"></activity>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Chạy ứng dụng
App khởi động MainActivity, ngay lập tức start MyActivity với flag REORDER_TO_FRONT. Nếu MyActivity đã có trong stack, nó sẽ được kéo lên trên cùng. Thử bấm Home, mở lại app từ launcher sẽ thấy MyActivity (không phải MainActivity).
Các flag liên quan khác
FLAG_ACTIVITY_SINGLE_TOP: Không tạo mới nếu activity đã ở đỉnh stack.FLAG_ACTIVITY_CLEAR_TOP: Xóa các activity trên đỉnh, đưa activity đích lên top.FLAG_ACTIVITY_NEW_TASK: Khởi động trong task mới.