3

私はActivity自分からを呼び出していServiceます。これは、イベントが発生するたび、およびIntentを介してSerializableオブジェクトを渡すたびに行います。ここでの問題は、アクティビティが2回目に呼び出されたときに、新しいインテントデータではなく、古いインテントデータを持っていることです。ですから、これは私がクラスで犯した間違いによるものだと確信していますが、Activityそれを理解することはできません。

public class ReceiveActivity extends Activity {
AlertDialog alertDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    alertDialog = new AlertDialog.Builder(this).create();
    alertDialog.setTitle("Event");
    CustomEvent custom= (CustomEvent) getIntent().getSerializableExtra("custom");
    alertDialog.setMessage(custom.getName());
    alertDialog.setIcon(R.drawable.ic_launcher);
    alertDialog.setButton("Ok", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) { 
            ReceiveActivity.this.finish();
        }
    });
    alertDialog.show();
}

@Override
protected void onPause() {
    if(alertDialog!=null) {alertDialog.dismiss();}
    super.onPause();

}

@Override
protected void onStop() {
    if(alertDialog!=null) {alertDialog.dismiss();}
    super.onStop();

}

これは、サービスからアクティビティを呼び出すために使用するコードです(aを介してNotification

Notification notification = new Notification(R.drawable.ic_launcher, "msg", 
System.currentTimeMillis());
notification.flags |= Notification.FLAG_ONLY_ALERT_ONCE | Notification.FLAG_AUTO_CANCEL;
Intent incoming =new Intent(this, ReceiveActivity.class);
incoming.putExtra("custom",custom);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,incoming, 0);
notification.setLatestEventInfo(this, "msg","incoming", contentIntent);
NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
nm.notify("Incoming", count++,notification);

}
4

3 に答える 3

4

onNewIntentその後のインテントを取得するには、メソッドをオーバーライドする必要があると思います。アクティビティの起動モードがsingleTopに設定されていて、アクティビティが 2 番目のインテントを取得するまで終了しない場合に発生します。

于 2012-05-22T19:45:02.780 に答える
3

アクティビティが再作成されないため、onResume() メソッドで実行してみてください。最上位のアクティビティとのみ場所が切り替わります。

Android は、メモリが必要な場合にのみアクティビティを終了します。

于 2012-05-22T19:45:38.053 に答える
1
/**
 * Override super.onNewIntent() so that calls to getIntent() will return the
 * latest intent that was used to start this Activity rather than the first
 * intent.
 */
@Override
public void onNewIntent(Intent intent){
    super.onNewIntent(intent);
    setIntent(intent);
}
于 2014-10-30T12:28:31.473 に答える