2017-02-14 8 views
1

私はアンドロイドアプリを開発しようとしています。私はthisチュートリアルを使用しました。私が理解したようMainActivityコードは、onCreate()ワークフローの混乱

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ActionBar actionBar = getSupportActionBar(); 
     actionBar.setDisplayHomeAsUpEnabled(true); 
     actionBar.setHomeButtonEnabled(true); 

     if (savedInstanceState == null) { 

      // withholding the previously created fragment from being created again 
      // On orientation change, it will prevent fragment recreation 
      // its necessary to reserve the fragment stack inside each tab 
      initScreen(); 

     } else { 
      // restoring the previously created fragment 
      // and getting the reference 
      carouselFragment = (CarouselFragment) getSupportFragmentManager().getFragments().get(0); 
     } 
    } 

以下の通りですsavedInstanceStateをチェックする行がnullであるかどうか、私たちは、ユーザーに現在の画面を保存しようとしています。私は、ホームボタンを押してアプリを開き、画面を回転させる可能性があると考えています。しかし、現在の状況では、アプリケーションが再オープンされたときにonCreateは呼び出されません。しかし、私はアンドロイドのワークフローを以下のlinkで行ったが、onCreate()を再度呼び出すことはできません。しかし、われわれはsavedInstanceStateをパラメータとして使用しています。このパラメータは、前の状態かどうかを確認するために使用されます。まとめると、私はsavedInstanceStateの使い方を混乱させます。以前の状態を確認するために使用される場合、なぜonCreateが呼び出されないのですか?

EDITED:コメントの説明どおり、アプリを再度開くとレクリエーションが発生しません。私が知っているようにonStart()が呼び出されます。ビューを再作成するか、以前のフラグメントを保存するために、onStartでsavedStateをチェックするにはどうすればよいですか?それらに対応するコールバックと

+1

onRestoreInstanceStateはあなたの混乱を解決する魔法の機能です。 – FlanschiFox

+1

私はそこに機能があると知っていますが、私は保存されたパラメータを使用しません。私はちょうど説明され、使用された使用法について混乱させた。 – starrystar

+4

onCreateは、アクティビティが新しく作成されたときに呼び出されます。アプリケーションが再オープンされると、アプリケーションは再作成されずに再起動されます。つまり、アクティビティはそのまま残ります。あなたの携帯電話を回転させると、アクティビティは破棄され、新しい設定で再作成されますので、onCreateは –

答えて

0

異なる状態は以下のとおりです。

onCreate - >created活動が作成されますが、まだ実行していないか、見えないもうされます。

onStart - >startedアクティビティは開始されていますが、まだ実行中またはフォーカスが外れています。

onResume - >resumed活動が実行されています。

- >pausedこのアクティビティは、フォーカスを失ったため、またはフォアグラウンドのアクティビティではないため、一時停止しています。

onStop - >stoppedこれ以上表示されないため、アクティビティが停止しています。

onDestroy - >destroyedそれが終了したので、活性は、例えば、破壊されオリエンテーションの変更があったか、メモリによってシステムによって破壊されていたためです。

例では、ホーム画面に移動するとアクティビティは停止しますが、破棄されないため、アプリに戻るときにはonCreateは呼び出されません。

お使いの携帯電話を回転させると、それが破壊され、新しい活動が作成されるので、それは、間違った方向性を持っているので、現在の活動は、使用することはできません。この場合、onCreateが呼び出されます。この素敵な図については

、アクティビティのライフサイクルでAndroid開発者documentationを参照してください。

あなたの活動だけで停止しているときに、あなたの活動は、その状態が保持されますので、一般的に、あなたは、savedInstanceStateを必要としません。停止時にsavedInstanceStateを使用する場合は、onRestoreInstanceState(Bundle)を使用してください。 onStart()の後に呼び出されます。

さらに詳しい情報はhereで確認できます。

0

onCreate()は、openendアプリケーションで方向を変更すると呼び出されます。 savedInstanceStateでは、オリエンテーションが変更される前にアクティビティが持っていた状態に関する情報を見つけることができます。私はアプリを再開することとは関係ありません。アプリケーション内のメソッドを扱うとき

0

正しい、たとえば...あなたは、各行が何をするか理解しておいてください:これは、メソッド内のスーパークラスを作成している意味

super.onCreate(savedInstanceState); 

。あなたが呼んでいるものを理解する。