前台服务在通知点击时被杀死



在Android 4.4.2中,点击我的前台服务通知会杀死我的进程。

在旧设备上(三星Tab 2运行4.2.2),我可以从最近的任务中滑动活动,仍然有我的Service在后台运行良好。然后当我点击Notification时,我的应用程序Activity又很高兴地启动了。

然而,一旦我在运行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

我已经运行了这个答案,并使用命令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中,以便允许服务以前台优先级运行。

Intent newIntent = new Intent(context, BroadcastToOrderedBroadcast.class);
newIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
return PendingIntent.getBroadcast(NativeService.getInstance(), mNotificationID, newIntent, PendingIntent.FLAG_UPDATE_CURRENT);

这是这些信息的来源:Android问题跟踪工具。

相关内容

  • 没有找到相关文章

最新更新