Jetpack Compose中Intent启动多个Activity问题排查
问题分析:点击启动LivestreamActivity时两个Activity同时启动的原因
我正在开发一款集成直播(Livestream)与视频通话(Video Calling)功能的App,已接入GetStream Android SDK并创建Application类初始化SDK客户端,在两个Activity中均引用该客户端实例来创建直播或视频通话。当前遇到的问题是:点击按钮通过Intent启动LivestreamActivity时,LivestreamActivity与VideoCallActivity会同时启动,二者使用同一用户Token,请问可能的原因是什么?
相关代码
StreamApplicationClass.kt
class StreamApplication:Application() { override fun onCreate() { super.onCreate() initializeSDK() } private fun initializeSDK() { val userId = "Kit_Fist" val userName = "Broadcaster" val userToken = "token" // Step 1 - Create a user. val user = User( id = userId, // predefined string name = userName, // Name and image are used in the UI role = "admin", ) // Step 2 - Initialize StreamVideo. For a production app, we recommend adding the client to your Application class or DI module. val client = StreamVideoBuilder( context = this, apiKey = apikey, user = user, token = userToken, ).build() } }
Channels.kt
FloatingActionButton( onClick = { val intent = Intent(context, LivestreamActivity::class.java) context.startActivity(intent) }, shape = CircleShape, )
LivestreamActivity
class LivestreamActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val call = StreamVideo.instance().call("livestream", "starter1") lifecycleScope.launch { call.join(create = true) } setContent{ VideoTheme{ LiveHost(call=call) } } } }
AndroidManifest.xml
<application android:name=".StreamApplication" ...... ..... <activity android:name=".MainActivity" android:exported="true" android:label="@string/app_name"> </activity> <activity android:name=".screens.calls.VideoCallActivity" /> <activity android:name=".screens.calls.LivestreamActivity" /> </application>
可能的原因排查方向
- 检查
LivestreamActivity的代码逻辑:确认onCreate或其他生命周期方法中,是否存在意外启动VideoCallActivity的代码,比如额外的startActivity调用、隐式Intent触发等;同时检查LiveHost组件内部是否包含跳转至VideoCallActivity的逻辑。 - 检查AndroidManifest.xml配置:查看两个Activity是否设置了重复的
intent-filter(比如相同的action、category),导致系统启动LivestreamActivity时,同时匹配到VideoCallActivity的启动规则。 - 检查按钮点击事件:确认该FloatingActionButton是否被重复绑定点击事件,或者所在Composable组件因状态变化多次重组,导致
startActivity被异常触发。 - 排查SDK相关逻辑:虽然当前代码中没有直接触发
VideoCallActivity的逻辑,但可以检查同一Token下,GetStream SDK是否存在内部触发页面跳转的机制,比如通话状态监听导致的自动跳转。
内容的提问来源于stack exchange,提问作者MACHARIAH Kuria
相关产品推荐
相关产品推荐

