我正在研究出租车/出租车预订系统的驾驶员应用程序。应用程序具有前台服务。服务开始在MainActivity中使用以下代码:
Intent myService = new Intent(getApplicationContext(), OnLineForegroundService.class);
startForegroundService(myService);
此服务使用以下代码通过触发来启动NewOrderActivity:
Intent intent = new Intent(OnLineForegroundService.this, NewOrderActivity.class);
intent.putExtra("newOrder", newOrder);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
之后,在NewOrderActivity应用程序中启动TripActivity(通过用户轻按):
//some finish service code
...
Intent intent = new Intent(NewOrderActivity.this, TripActivity.class);
intent.putExtra("order", newOrder);
startActivity(intent);
finish();
最后一步是旅程的终点:
//TripActivity
Intent i = new Intent(TripActivity.this, MainActivity.class);
i.putExtra("showOnLineDialog", true);
startActivity(i);
finishAffinity();
这些动作是循环执行的。有时(很少),NewOrderActivity在startActivity(intent)
之后不开始。甚至NewOrderActivity中的onCreate(Bundle savedInstanceState)
或onResume()
中的代码也不执行。当某些活动处于前台时,什么也不会发生。当应用程序处于后台(前台服务除外)时,应用程序将转到前台并显示上次打开的活动,但不显示NewOrderActivity。
可能是什么问题呢?我想问题可能出在活动生命周期和标志(FLAG_ACTIVITY_NEW_TASK
和FLAG_ACTIVITY_NO_HISTORY
)中,但不确定。
清单:
<application
android:name=".TaxiApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".ui.activities.SplashActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ui.activities.MainActivity"
android:screenOrientation="portrait" />
<activity
android:name=".ui.activities.NewOrderActivity"
android:screenOrientation="portrait" />
<activity
android:name=".ui.activities.TripActivity"
android:screenOrientation="portrait" />
<service android:name=".services.OnLineForegroundService" />
</application>
答案 0 :(得分:0)
我认为从具有服务上下文的服务开始活动不是一个好主意,请尝试使用应用程序上下文。 更改此:
Intent intent = new Intent(OnLineForegroundService.this, NewOrderActivity.class);
对此:
Intent intent = new Intent(getApplicationContext(), NewOrderActivity.class);