androidのonNewIntentの簡単な説明

1626 ワード


回転:http://blog.csdn.net/tyj1982/article/details/6848879
Androidアプリケーションの開発時には、Activityから別のActivityを起動して、新しいActivityにデータを送るのはとても簡単ですが、バックグラウンドで動作するActivityをフロントに戻して、データを伝えると少し問題があるかもしれません.
まず、デフォルトでは、Intentを介してActivityに起動すると、同じActivityが既に存在していても、システムは新しいActivityのインスタンスを作成して表示します.Activityを複数回実例化しないためには、Android Manifest.xmlにactivityのロード方式を設定することにより、シングルタスクモードを実現する必要があります.
<activity android:label="@string/app_name" android:launchmode="singleTask"android:name="Activity1"></activity>
launchModeがsingleTaskの場合、Intentを通じてActivityに起動します.システムに既に一例があると、システムはこのインスタンスに要求を送信します.しかし、この時、システムは通常の状況で要求データを処理するonCreate方法を呼び出すのではなく、OnewIntent方法を呼び出します.
 protected void onNewIntent(Intent intent) {

  super.onNewIntent(intent);

  setIntent(intent);//must store the new intent unless getIntent() will return the old one

  processExtraData();

 }
忘れないでください.システムはいつでもバックグラウンドの運行するActivityを殺してしまうかもしれません.もしこのすべてが発生したら、システムはOnewIntentメソッドを呼び出さずに、OnewIntentメソッドを起動します.良い解決方法はOneCreateとOnewIntentメソッドで同じ処理データを呼び出す方法です.以下の通りです.
public void onCreate(Bundle savedInstanceState) {

   super.onCreate(savedInstanceState);

   setContentView(R.layout.main);

   processExtraData();

 }

  

 protected void onNewIntent(Intent intent) {

   super.onNewIntent(intent);

   setIntent(intent);//must store the new intent unless getIntent() will return the old one

   processExtraData()

 }

  

 private void processExtraData(){

   Intent intent = getIntent();

   //use the data received here

 }