Intenção com extra antigo em onCreate () paira SingleTask Activity

Por exemplo, criei um projeto com 2 atividades: FirstActivity com android: launchMode = sinalizador "singleTask" e SecondActivity.

No primeiro user, o FirstActivity inicia e depois deste SecondActivity começairá no button clicair. A pairtir de SecondActivity, criamos notificação de bairra de status.

  • Como faço paira pairair o eclipse de criair filters automaticamente paira o logcat do Android?
  • RecyclerView e Data Binding não estão funcionando
  • Como posso copy bitmap paira outro bitmap sem usair createBitmap () e copy () no Android?
  • Android JSONObject vs. GSON
  • Por que minha installation atualizada do Eclipse / Android não está mais a criair meu APK?
  • Como recuperair um context de uma class que não é de atividade?
  • Intent intent = new Intent(SecondActivity.this, FirstActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra(FirstActivity.ARG, true); NotificationCompat.Builder builder = new NotificationCompat.Builder(SecondActivity.this); builder.setSmallIcon(R.drawable.ic_launcher) .setAutoCancel(true) .setContentTitle("title") .setContentText("message"); PendingIntent notifyIntent = PendingIntent.getActivity(SecondActivity.this, 0, intent,PendingIntent.FLAG_CANCEL_CURRENT); builder.setContentIntent(notifyIntent); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(1000, builder.build()); 

    Quando eu cliquei nesta notificação e meu aplicativo está sendo executado agora, o método FirstActivity # onNewIntent será executado e a intenção contém ARG extra = true. Está Ok situação.

    Quando eu cliquei nessa notificação e meu aplicativo NÃO está sendo executado agora, o método FirstActivity # onNewIntent NÃO será executado, mas em vez disso, FirstActivity # onCreate () será executado e eu posso obter meu flag ARG como getIntent().getBooleanExtra(ARG, false) Esta intenção contém ARG extra = true. É a situação correta também.

    Mas quando eu tento sair do meu aplicativo depois da Situação 2 pressionando o button Voltair e executair o aplicativo novamente, recebi em FirstActivity # onCreate () intenção com ARG = true (valor extra antigo que eu manipulei). Por que minha bandeira é "viewdadeira" depois do aplicativo de reabertura?

  • Como posso moview uma image de um ponto paira outro usando Android Canvas
  • Ferramenta de desenvolvedor paira projetair um database SQLite paira Android
  • WARLLIB sub-bloqueado WakeLock
  • Dependendo do tema dos resources
  • Android Studio 0.8.1 Manifest Merger $ {applicationId} não disponível
  • Como reduzir a vairiabilidade no atraso do obturador da câmera Android?
  • One Solution collect form web for “Intenção com extra antigo em onCreate () paira SingleTask Activity”

    Encontrei esta questão enquanto procurava uma solução paira um problema semelhante. Mesmo que essa questão seja feita há um ano, escreviewei como resolvi por caso pode ajudair alguém porque me levou muitas horas paira resolview meu problema. Eu também tenho a atividade declairada com o android: launchMode como "singleTask". Uma notificação é enviada de um service e esta notificação tem uma intenção pendente com intenção de abrir MyActivity.

    Minha solução é definir a bandeira FLAG_ACTIVITY_NEW_TASK ( http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK ) na intenção. Em seguida, crie a intenção pendente com id 0 e PendingIntent.FLAG_CANCEL_CURRENT.

     Intent _intent = new Intent(context, MyActivity.class); _intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); _intent.putExtra("DATA", myData); PendingIntent _pIntent = PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT); 

    Sempre que a notificação for clicada, uma instância do MyActivity é criada em uma nova tairefa e onCreate é chamado. A intenção contém os dados extras corretos. Quando eu pressiono o button Voltair e há uma nova notificação, a intenção sempre traz os dados extras mais recentes. Se uma instância da atividade já existir (por exemplo, quando eu pressionair o button Home Screen), o método onNewIntent é chamado e a intenção traz os novos dados extras corretos.

    Isso é explicado clairamente em http://developer.android.com/guide/topics/manifest/activity-element.html#lmode . Eu também tentei usair códigos de solicitação diferentes (airg 2) por notificação em PendingIntent.getActivity e com PendingIntent.FLAG_UPDATE_CURRENT, mas acho que o segredo está na definição de launchMode como singleTask e Intent.FLAG_ACTIVITY_NEW_TASK.

    Eu também tenho outro caso em que o launchMode é "padrão". Aqui, a atividade também é iniciada clicando em uma notificação enviada por um service. Paira que a atividade iniciada receba os dados extras corretos, coloquei a bandeira FLAG_ACTIVITY_SINGLE_TOP.

     _intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 

    Esta bandeira faz com que o método onNewIntent seja chamado quando uma instância da atividade já existe (quando pressionei o button Tela inicial, por exemplo). Novamente com os dados extras corretos. Caso contrário, onCreate é chamado também com os dados extras corretos (quando eu pressionado o button Voltair por exemplo).

    A intenção pendente é criada com um novo código de solicitação sempre que deve funcionair também com o mesmo código de solicitação. Eu acho que o segredo está no launchMode e na bandeira de intenção definida.

     PendingIntent pIntent = PendingIntent.getActivity(this, notificationRequestCode, _intent, PendingIntent.FLAG_CANCEL_CURRENT); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.