5

In Android 4.4.2 facendo clic sulla notifica del servizio in primo piano si sta uccidendo il processo.Il servizio in primo piano viene ucciso nella notifica fare clic su

Su dispositivi più vecchi (scheda Samsuing 2 in esecuzione 4.2.2), è possibile far scorrere l'attività da Attività recenti e mantenere il mio Service correttamente in esecuzione in background. Quindi quando clicco sulla Notification la mia app Activity ricomincia abbastanza felicemente.

Tuttavia, dopo aver fatto clic su Notifica sul mio Nexus 7 in esecuzione 4.4.2, il processo viene interrotto (fino a quando il clic non viene eseguito in background felicemente). Il PendingIntent non sembra di sparare a tutti, o almeno, non colpisce la prima riga del BroadcastReceiver:

05-21 16:17:38.939: I/ActivityManager(522): Killing 2268:com.test.student/u0a242 (adj 0): remove task 

Ho eseguito attraverso this risposta, e utilizzando il comando dumpsys activity proccesses ho ha confermato che il mio servizio è in esecuzione in primo piano correttamente.

Quindi, cosa si tratta di fare clic su questa notifica che sta uccidendo il mio processo?

Codice coinvolti nello spostamento del servizio al primo piano segue:

Servizio:

@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); 
} 
+0

Si tratta di un bug noto che viene monitorato [qui] (https://code.google.com/p/android/issues/detail?id=53313). Puoi provare la soluzione elencata in [commento # 7] (https://code.google.com/p/android/issues/detail?id=53313#c7). –

risposta

4

Aggiungi FLAG_RECEIVER_FOREGROUND bandiera per il PendingIntent utilizzato dalla tua segnalazione per consentire al servizio di funzionare con priorità in primo piano.

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

Questa è la fonte di queste informazioni: Android Issue Tracker tool.

+0

Non è equivalente a FLAG_ACTIVITY_NEW_TASK? Entrambi sono 0x10000000, puoi supportare il riferimento che posso impostare FLAG_RECEIVER_FOREGROUND? –

+0

@Manish Mulimani ho seguito il tuo suggerimento. Quando la mia app è chiusa e se faccio clic sulla notifica il mio servizio verrà riavviato. E anche il ricevitore BroadCast non funziona? –

Problemi correlati