ARouter或startActivity多次调用时页面Intent更新

ARouter或startActivity多次调用时页面Intent更新

大致调用过程是这样A.apk中有MainActivity,subActivity两个页面,MainActivity会通过ARouter开启subActivity并传Intent过来更新sub的页面。
B.apk中调用startActivity去开启A.apk中的MainActivity并传Intent更新MainActivity页面。

问题

  1. 会有多个相同的Activity被创建
  2. 多次调用ARouter或startActivity后,发现传递的Intent没有被更新

示例代码

以第三方APK调用其他APK中的页面为例:
此为B.apk代码

        Intent intent = new Intent(ACTION_MAIN)
        ComponentName componentName = new ComponentName("com.xxx.package", "com.xxx.package.MainActivity")
        intent.setComponent(componentName)
        intent.putExtra("query", "更新给MainActivity页面的Intent参数")

A.apk代码, 这里以kotlin写的

subActivity 与 MainActivity代码中的onCreate差不多, 一个是ARouter来获取传递来的参数,另一个则是通过getIntent来获取
subActivity:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_sub)
        try {
            ARouter.getInstance().inject(this); // 通过它来得到传递来的参数
        } catch (e: Exception) {
            e.printStackTrace()
        }

        Log.d(TAG, "onCreate")
        showResult() // 这里更新页面
    }

MainActivity:

     val intentData = intent
            if (intentData != null) {
                remoteQuery = intentData.getStringExtra("query")!!
            } else {
                Log.d(TAG, "intent is null")
            }

解决方法

  1. 在androidManifest里面对这个activity的launchMode设置为singleInstance
<activity android:name="com.xxxxx.MainActivity" android:launchMode="singleInstance" />
<activity android:name="com.xxxxx.subActivity" android:launchMode="singleInstance" />
  1. MainActivity, subActivity中加上onNewIntent的重载,然后更新intent或ARouter传的参数值
    override fun onNewIntent(intent: Intent?) {
        super.onNewIntent(intent)
        ARouter.getInstance().inject(this) // 注意ARouter要调用这一行
        setIntent(intent)
        Log.d(TAG, "onNewIntent")
        // 在此更新页面
    }

作者:帅得不敢出门

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值