prevent multiple instances of an activity when it is launched with different intents(轉載)

轉載自:《how to prevent multiple instances of an activity when it is launched with different intents


problem:

I've come across a bug in my application when it is launched using the "Open" button on the android market. It seems that launching it from the market uses a different intent then launching it from the phone's applications menu. This is leading to multiple copies of the same activity being launched, which are conflicting with each other.

For example, if my app consists of the activities A-B-C then the above issue can lead to a stack A-B-C-A.

I tried using android:launchMode="singleTask" on all the activities to fix this problem, but it has the unwanted side-effect of clearing the activity stack to root whenever I hit HOME.

Example: A-B-C -> HOME -> A when what I need is A-B-C -> HOME -> A-B-C

Is there a good way to prevent launching multiple activities of the same type without reseting to the root activity when using HOME?


solution:

Add this to onCreate and you should be good to go:

// Possible work around for market launches. See http://code.google.com/p/android/issues/detail?id=2373
// for more details. Essentially, the market launches the main activity on top of other activities.
// we never want this to happen. Instead, we check if we are the root and if not, we finish.
if (!isTaskRoot()) {
    final Intent intent = getIntent();
    if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN.equals(intent.getAction())) {
        Log.w(LOG_TAG, "Main Activity is not the root.  Finishing Main Activity instead of launching.");
        finish();
        return;       
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章