在onCreate中调用handleIntent方法后,实际上是在当前线程上继续执行onResp回调; 因为handleIntent方法是BaseWXApiImplV10对象的方法,方法中用传进来的的“IWXAPIEventHandler”参数(也就是这里的"WXEntryActivity"对象),调用onResp回调方法。 也就是onResp的回调会在onCreate方法体中执行完成。 所以onResp中调用finish()方法,实际上是在Activity中调用finish()方法。 所以问题变成了在Activity中调用finish()方法,Activity生命周期是怎样的? --------------------------------------------------------------------------------------- 只执行onCreate()、onDestory()会有什么影响? 可能会发生内存泄漏。以下是我碰到的问题。 集成阿里云ams后,“com.ali.telescope.internal.plugins.b.c”有个内部类,混淆后的名字是a,继承了“ActivityLifecycleCallbacks”。这个类有个成员变量c,数据结构为HashMap,key为Activity。当回调“onActivityCreated”,c会把当前的activity存放在集合里,当回调“onActivityStarted”,c会把当前activity从集合中移除掉。 如果一个activity走完整生命周期,不会有问题。但是如果只走了onCreate()和onDestoy()就会内存泄漏——activity被c一直持有不能释放。 [图片]
WXEntryActivity在onResp中调用finish()后,不回调onStart()?参考微信开放平台提供的demo项目,我创建了<package-name>.wxapi.WXEntryActivity类,并实现了IWXAPIEventHandler接口。 在调用分享图片到微信好友后,返回APP,WXEntryActivity被唤起。 在onCreate()方法中我调用了 wxApi = WXAPIFactory.createWXAPI(applicationContext, , false) try { wxApi?.handleIntent(intent, this) } catch (e: Throwable) { Log.e(TAG, "onCreate ex", e) } 在回调 fun onResp(resp: BaseResp)方法执行完成后,我调用了finish()方法,结束当前页面。 通过打印日志,我发现方法生命周期只执行了onCreate()和onDestroy()。 class WXEntryActivity : Activity(), IWXAPIEventHandler { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) wxApi = WXAPIFactory.createWXAPI(applicationContext, WxPlatformApp.APP_ID, false) try { wxApi?.handleIntent(intent, this) } catch (e: Throwable) { KLog.e(TAG, "onCreate ex", e) } KLog.d(TAG, "WXEntryActivity onCreate") } override fun onStart() { super.onStart() KLog.d(TAG, "WXEntryActivity onStart") } override fun onResume() { super.onResume() KLog.d(TAG, "WXEntryActivity onResume") } override fun onPause() { super.onPause() KLog.d(TAG, "WXEntryActivity onPause") } override fun onStop() { super.onStop() KLog.d(TAG, "WXEntryActivity onStop") } override fun onDestroy() { super.onDestroy() KLog.d(TAG, "WXEntryActivity onDestroy") } override fun onResp(resp: BaseResp) { ... finish() } } 打印的日志生命周期只有如下,请问问题出在哪里呢? 05-21 19:46:38.511 3843-3843/ I/qian.BaseApplication: onActivityCreated .wxapi.WXEntryActivity@21b051a6 05-21 19:46:38.512 3843-3843/ D/CrashReport: >>> com.gzlike.qassistant.wxapi.WXEntryActivity onCreated <<< 05-21 19:46:38.515 3843-3843/ D/qian.WXEntryActivity: WXEntryActivity onCreate 05-21 19:46:38.549 3843-3843/ I/qian.BaseApplication: onActivityDestroyed .wxapi.WXEntryActivity@21b051a6 05-21 19:46:38.549 3843-3843/ D/CrashReport: >>> .wxapi.WXEntryActivity onDestroyed <<< 05-21 19:46:38.549 3843-3843/ D/qian.WXEntryActivity: WXEntryActivity onDestroy
2020-05-21