2012-01-27 11 views
3

私は、単一の答えを探しています(しかし、私は間違った質問をされる可能性があります)Androidのイベントは、アクティビティが破棄されるまで一度だけ呼び出されますか?

Question-活動が破壊されるまでどのイベントが唯一のTOTAL一度呼び出されますでしょうか?

私は、ユーザが携帯電話を横向きに回転させてoncreateとonstartの両方が呼び出され、並べ替えの再ロードを引き起こすために質問します。私はそれ(アクティビティが殺されるまで)のみ

は、あなたが本当に何を指定しない

+0

あなたの件名と内容は異なるです...あなたは、アクティビティやアプリケーションのために一度だけ呼び出されるメソッドを望みます...これらは2つの異なるものです... –

答えて

11

アクティビティ固有の場合は、onCreateイベントのsavedInstanceStateパラメータを確認してください。 nullの場合はコードを実行し、そうでなければコードはすでに実行されています。

例:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    if(savedInstanceState == null) { 
     // Run your code 
    }   
} 

のonCreateが初めて実行されるときsavedInstanceStateは常にnullになり、それがその後の移入されます。

+0

恐ろしい!これはまさに私が探していたものです! –

1

事前にありがとう1Xを実行になるだろうに行動を置くことができるイベントを探しています

それを使ってやろうとしているので、これがあなたの使用に適切であるとは保証できませんが、Application.onCreateは一度だけ呼び出されます。

+0

なぜ私のビューが風景スイッチ?私はoncreateのhttpエンドポイントを呼び出すイベントを持っています。オリエンテーションを切り替えるたびにヒットしています –

+2

アンドロイドはあなたの活動を殺し、オリエンテーションの変更があるときにそれらを再作成します... –

1

オリエンテーション変更でのアクティビティの再作成を取り除きたい場合は、マニフェストのコンフィグレーションをリスンすることができます。

<activity 
      android:name=".MyActivity" 
      android:configChanges="orientation" > 
    </activity> 

そして、あなたがそうのようonConfigurationChanged上書きすることができます:それは全体の活動を再作成せずに、新しい方向に一致するようにレイアウトを再作成する

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    LinearLayout main = (LinearLayout) findViewById(R.id.mainLayout); 
    main.requestLayout(); 
} 

+0

この方法はお勧めしません。例えば、それは間違っています - 回転イベントの場合だけ、あなたが持っているものよりも多くの値を 'android:configChanges'で必要とします。第2に、すべての構成変更を処理するわけではありません。 'android:configChanges'は妥当な答えですが、それほど多くはなく、動的フラグメントや' setRetainInstance(true) 'のようなものが出現したことはまだありません。 – CommonsWare

関連する問題