Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Khởi động lại (Restart) ứng dụng Android theo chương trình

Mục tiêu

Tự động restart toàn bộ ứng dụng (process) khi người dùng bấm nút.

Cách làm: Dùng AlarmManager + PendingIntent

Bước 1: Tạo project

Bước 2: Layout activity_main.xml

<LinearLayout ... android:gravity="center" android:orientation="vertical">
    <TextView android:id="@+id/text" android:textSize="28sp" android:textAlignment="center" android:layout_width="match_parent" android:layout_height="wrap_content" />
</LinearLayout>

Bước 3: MainActivity.java

public class MainActivity extends AppCompatActivity {
    TextView textview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textview = findViewById(R.id.text);
        textview.setText("Click here to restart app");
        textview.setOnClickListener(v -> restartApp());
    }

    private void restartApp() {
        Intent intent = new Intent(this, MainActivity.class);
        int pendingIntentId = 123456;
        PendingIntent pendingIntent = PendingIntent.getActivity(this, pendingIntentId, intent, PendingIntent.FLAG_CANCEL_CURRENT);
        
        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        // Khởi động lại sau 100ms
        alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + 100, pendingIntent);
        
        System.exit(0); // Kill process hiện tại
    }
}

Giải thích:

  • Tạo Intent trỏ về Activity chính (MainActivity).
  • Tạo PendingIntent với FLAG_CANCEL_CURRENT.
  • Dùng AlarmManager để schedule PendingIntent chạy sau 100ms.
  • System.exit(0) kết thúc process hiện tại. AlarmManager sẽ khởi động lại app.

Kết quả

Màn hình ban đầu:

Khởi động lại (Restart) ứng dụng Android theo chương trình

Click TextView → App tắt và tự mở lại sau ~100ms.

Lưu ý & Cách thay thế

  • System.exit(0) không được khuyến khích (Android quản lý lifecycle tự động).
  • Cách nhẹ nhàng hơn: recreate() (chỉ restart Activity), hoặc dùng ProcessPhoenix library.
  • API 11+: Activity.recreate() restart Activity hiện tại.
  • Restart toàn process: Library ProcessPhoenix.triggerRebirth(context).