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;       
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值