我有一个启动服务的 Android 应用程序,该服务在后台连续运行。当此服务启动时,它会创建一个挂起的意图,假设在单击通知时加载应用程序的主 UI。这在手机处于活动状态并正在使用时有效,但如果设备处于非活动状态超过 30 分钟左右,则在用户单击通知后会出现一个奇怪的错误。而不是加载 UI 并显示所有按钮等 - 黑屏出现冻结应用程序。
这是我启动服务的方式 - 以防我没有正确启动服务。
public class MainActivity extends Activity {
[...]
public void serviceOn(View view){
startService(new Intent(getBaseContext(), StableIPService.class));
}
[...]
}
这是我服务的代码
public class StableIPService extends Service {
[...]
public int onStartCommand(Intent intent, int flags, int startId) {
Notification notice;
//The intent to launch when the user clicks the expanded notification
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// Build notification
notice = new NotificationCompat.Builder(this)
.setContentTitle(getString(R.string.app_name))
.setContentText("Checking for malicious network connections")
.setSmallIcon(R.drawable.ic_launcher)
.setContentIntent(pendIntent)
.build();
notice.flags |= Notification.FLAG_NO_CLEAR;
startForeground(myID, notice);
return (START_STICKY);
}
[...]
}
...我在某处读到,将这些属性添加到 AndroidManifest.xml 文件会有所帮助,所以我添加了它们...它似乎根本没有帮助,但它们就在这里。
<activity
android:name=".MainActivity"
[...]
android:launchMode="singleTask"
android:taskAffinity=""
android:excludeFromRecents="true" >