在Android 4.4.2中,单击我的Foreground Service通知会终止我的进程.
在较旧的设备上(Samsuing Tab 2运行4.2.2),我可以从最近的任务中删除活动,并且仍然可以在后台运行我的服务.然后,当我点击通知时,我的应用程序活动再次开心.
但是,一旦我点击运行4.4.2的Nexus 7上的通知,我的进程就会被终止(直到点击在后台运行得很快). PendingIntent似乎根本没有触发,或者至少它没有触及BroadcastReceiver的第一行:
05-21 16:17:38.939: I/ActivityManager(522): Killing 2268:com.test.student/u0a242 (adj 0): remove task
我已经通过this回答,并使用命令dumpsys activity proccesses我已经确认我的服务正在前台正确运行.
那么,点击这个杀死我的进程的通知又是什么呢?
服务:
@Override
public int onStartCommand(Intent intent,int flags,int startId) {
Log.i("NativeWrappingService","Starting Service...");
startForeground(NotificationIcon.NOTIFICATION_STUDENT,NotificationManager.getStudentIcon(this).getNotification());
return super.onStartCommand(intent,flags,startId);
}
NotificationIcon:(getStudentIcon(this).getNotification())
public Notification getNotification() {
Builder mBuilder = new Builder(mContext);
if(mSmallIcon != -1) mBuilder.setSmallIcon(mSmallIcon);
if(mLargeIcon != null) mBuilder.setLargeIcon(mLargeIcon);
if(mTitle != null) mBuilder.setContentTitle(mTitle);
if(mSubTitle != null) mBuilder.setContentText(mSubTitle);
if(mSubTitleExtra != null) mBuilder.setContentInfo(mSubTitleExtra);
mBuilder.setOngoing(mOngoing);
mBuilder.setAutoCancel(mAutoCancel);
mBuilder.setContentIntent(getPendingIntent(mContext,mAction,mBundle,mActivity));
return mBuilder.build();
}
private PendingIntent getPendingIntent(Context context,String action,Bundle extras,String activity) {
Intent newIntent = new Intent(context,BroadcastToOrderedBroadcast.class);
Bundle bundle;
if(extras != null) bundle = extras;
else bundle = new Bundle();
if(activity != null && !activity.equalsIgnoreCase("")) {
BundleUtils.addActivityToBundle(bundle,activity);
}
BundleUtils.addActionToBundle(bundle,action);
newIntent.putExtras(bundle);
return PendingIntent.getBroadcast(NativeService.getInstance(),mNotificationID,newIntent,PendingIntent.FLAG_UPDATE_CURRENT);
}
最佳答案
将FLAG_RECEIVER_FOREGROUND标志添加到您的通知中使用的PendingIntent,以便允许服务以Foreground优先级运行.
Intent newIntent = new Intent(context,BroadcastToOrderedBroadcast.class);
newIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
return PendingIntent.getBroadcast(NativeService.getInstance(),PendingIntent.FLAG_UPDATE_CURRENT);
以下是此信息的来源:Android Issue Tracker tool.