如果前台服务正在运行,我会从启动器中获取活动的多个实例。
我已经尝试了几乎所有可以想到的事情,从扩展应用程序类中保存上下文引用,到使用singleTask,singleTop ...更改我意图上的标志,一切。
我对前台应用程序的通知执行相同的操作。无论我如何启动活动,它都会创建一个新活动。这是在我的主要活动被销毁之后完成的,例如从最近的任务列表中划掉。否则,它趋向于正常返回应用程序而不会发生意外。
final Intent notificationIntent = new Intent(appContext, MainActivity.class);
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
notificationIntent.setAction(Intent.ACTION_MAIN);
notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(notificationIntent);
<activity
android:name=".SplashActivity"
android:configChanges="keyboardHidden|orientation|screenSize|screenLayout|keyboard"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:configChanges="keyboardHidden|orientation|screenSize|screenLayout|keyboard">
</activity>
D/MapboxConstructor: Building Map.
I/chatty: uid=10268(com.thirdplanetinteractive.tpims) identical 1 line
D/MapboxConstructor: Building Map.
D/MainService: On Start Command.
I/chatty: uid=10268(com.thirdplanetinteractive.tpims) identical 1 line
D/MainService: On Start Command.
V/Mbgl-ConnectivityReceiver: connected - true
I/Mbgl-EGLConfigChooser: In emulator: false
D/SplashActivity: Destroyed Splash
I/chatty: uid=10268(com.thirdplanetinteractive.tpims) identical 1 line
D/SplashActivity: Destroyed Splash
数字将继续增长,我想前台服务可能会以某种方式引用启动它的活动?老实说,我真是机智,甚至不知道该怎么想。
我希望,如果我从启动器启动我的应用程序并检测到现有上下文,它将使用它来启动活动并将其重新排序到最前面。
我不明白自己在做什么,我没有对MainActivity或MainService的静态引用。因此它们甚至不受约束。我相信比我聪明的人可以帮助我弄清楚为什么我的应用程序每次都要启动新实例。