Đối với tình huống này, tôi sẽ đi đến một trong hai cách được tiếp cận, singleTask
trong tệp manifest.xml HOẶC một cờ trong các phương thức onResume()
& của Hoạt động onDestroy()
tương ứng.
Đối với giải pháp đầu tiên : Tôi thích sử dụng singleTask
cho hoạt động trong tệp kê khai hơn là singleInstance
, theo cách sử dụng, singleInstance
tôi phát hiện ra rằng trong một số trường hợp, hoạt động tạo ra một phiên bản riêng biệt mới cho chính nó dẫn đến có hai cửa sổ ứng dụng riêng biệt trong các ứng dụng đang chạy trong bcakground và bên cạnh việc phân bổ thêm bộ nhớ sẽ dẫn đến Trải nghiệm người dùng rất tệ khi người dùng mở chế độ xem ứng dụng để chọn một số ứng dụng để tiếp tục. Vì vậy, cách tốt hơn là xác định hoạt động tại tệp kê khai.xml như sau:
<activity
android:name=".MainActivity"
android:launchMode="singleTask"</activity>
bạn có thể kiểm tra các chế độ khởi chạy hoạt động tại đây .
Đối với giải pháp thứ hai , bạn chỉ cần xác định một biến tĩnh hoặc một biến tùy chọn, ví dụ:
public class MainActivity extends Activity{
public static boolean isRunning = false;
@Override
public void onResume() {
super.onResume();
// now the activity is running
isRunning = true;
}
@Override
public void onDestroy() {
super.onDestroy();
// now the activity will be available again
isRunning = false;
}
}
và từ phía bên kia khi bạn muốn khởi chạy hoạt động này, chỉ cần kiểm tra:
private void launchMainActivity(){
if(MainActivity.isRunning)
return;
Intent intent = new Intent(ThisActivity.this, MainActivity.class);
startActivity(intent);
}