次のような小さなプログラムを作成しました。
package com.example.lifecycle;
import Android.app.Activity;
import Android.content.Context;
import Android.os.Bundle;
import Android.util.AttributeSet;
import Android.util.Log;
import Android.view.Menu;
import Android.view.MenuItem;
import Android.view.View;
public class LifeLogger extends Activity {
private String TAG = this.getClass().getName().toString();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_life_logger);
Log.d(TAG,"onCreate event");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG,"onResume event");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG,"onPause event");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG,"onStop event");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(TAG,"onRestart event");
}
@Override
public View onCreateView(String name, Context context, AttributeSet attrs) {
Log.d(TAG,"onCreateView event");
return super.onCreateView(name, context, attrs);
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG,"onStart event");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG,"onDestroy event");
}
}
これが主な活動です。
LogCatは次のとおりです。
06-11 07:07:10.033:D/com.example.lifecycle.LifeLogger(600):onCreateViewイベント06-11 07:07:10.033:D/com.example.lifecycle.LifeLogger(600):onCreateViewイベント06- 11 07:07:10.043:D/com.example.lifecycle.LifeLogger(600):onCreateViewイベント06-11 07:07:10.053:D/com.example.lifecycle.LifeLogger(600):onCreateViewイベント06-11 07 :07:10.063:D/com.example.lifecycle.LifeLogger(600):onCreateViewイベント06-11 07:07:10.063:D/com.example.lifecycle.LifeLogger(600):onCreateViewイベント06-11 07:07 :10.063:D/com.example.lifecycle.LifeLogger(600):onCreateViewイベント06-11 07:07:10.063:D/com.example.lifecycle.LifeLogger(600):onCreateViewイベント06-11 07:07:10.073 :D/com.example.lifecycle.LifeLogger(600):onCreateViewイベント06-11 07:07:10.073:D/com.example.lifecycle.LifeLogger(600):onCreateViewイベント06-11 07:07:10.083:D /com.example.lifecycle.LifeLogger(600):onCreateViewイベント06-11 07:07:10.083:D/com.example.lifecycle.LifeLogger(600):onCreateViewイベント06-11 07:07:10.083:D/com .example.lifecy cle.LifeLogger(600):onCreateViewイベント06-11 07:07:10.093:D/com.example.lifecycle.LifeLogger(600):onCreateViewイベント06-11 07:07:10.093:D/com.example.lifecycle。 LifeLogger(600):onCreateViewイベント06-11 07:07:10.093:D/com.example.lifecycle.LifeLogger(600):onCreateViewイベント06-11 07:07:10.103:D/com.example.lifecycle.LifeLogger( 600):onCreateViewイベント06-11 07:07:10.113:D/com.example.lifecycle.LifeLogger(600):onCreateViewイベント06-11 07:07:10.113:D/com.example.lifecycle.LifeLogger(600) :onCreateViewイベント06-11 07:07:10.113:D/com.example.lifecycle.LifeLogger(600):onCreateイベント06-11 07:07:10.113:D/com.example.lifecycle.LifeLogger(600):onStartイベント06-11 07:07:10.113:D/com.example.lifecycle.LifeLogger(600):onResumeイベント06-11 07:07:10.193:D/com.example.lifecycle.LifeLogger(600):onCreateViewイベント06 -11 07:07:10.223:D/gralloc_goldfish(600):GPUエミュレーションなしのエミュレーターが検出されました。 06-11 07:08:19.633:D/com.example.lifecycle.LifeLogger(600):onPauseイベント06-11 07:08:20.213:D/com.example.lifecycle.LifeLogger(600):onStopイベント06- 11 07:08:31.993:D/com.example.lifecycle.LifeLogger(600):onRestartイベント06-11 07:08:31.993:D/com.example.lifecycle.LifeLogger(600):onStartイベント06-11 07 :08:31.993:D/com.example.lifecycle.LifeLogger(600):onResumeイベント06-11 07:08:51.073:D/com.example.lifecycle.LifeLogger(600):onPauseイベント06-11 07:08 :52.963:D/com.example.lifecycle.LifeLogger(600):onStopイベント06-11 07:08:54.043:D/com.example.lifecycle.LifeLogger(600):onDestroyイベント
ここで何が起こったのですか? onCreateViewが何度も呼び出されるのはなぜですか?
OnCreateViewのタイミングは何ですか?
ありがとう。
更新:
膨らんだxml:
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context="${packageName}.${activityClass}" >
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/hello_world" />
</RelativeLayout>
マニファスト:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.lifecycle"
Android:versionCode="1"
Android:versionName="1.0" >
<uses-sdk
Android:minSdkVersion="15"
Android:targetSdkVersion="17" />
<application
Android:allowBackup="true"
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/AppTheme" >
<activity
Android:name="com.example.lifecycle.LifeLogger"
Android:label="@string/app_name" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
実行Android APIレベル16
Activity
でクラスを拡張しました。つまり、クラスのライフサイクルは次のようになります。
したがって、onCreateViewはアクティビティのライフサイクルメソッドではありません。これは、ドキュメントで述べられているように、指定されたタスクに使用される単なるメンバーメソッドです。
GetSystemServiceによって返されたLayoutInflaterでインフレートするときに使用されるAndroid.view.LayoutInflater.Factory.onCreateViewの標準実装。この実装は何も行わず、Android.os.Build.VERSION_CODES.HONEYCOMB以前のアプリ用です。新しいアプリはonCreateView(View、String、Context、AttributeSet)を使用する必要があります。
ActivityでonCreateView()の呼び出しに依存するのは、プログラミングが悪いです。
クラスに拡張されたFragment
を使用し、onCreateView()メソッドを記述した場合、同じフラグメントを使用している場合は、onAttach()およびonDestroyView()の後に2回だけ呼び出されます。
この図をご覧ください。
ここで、それはフラグメントのライフサイクルの方法です。
したがって、間違った前提でテストしています。それで全部です!
Androidフレームワークは、依存関係の挿入のメカニズムを使用します。レイアウトファイルが膨張している場合。このため、onCreateViewは何度も呼び出されます。
SetContentViewを削除して、onCreateViewが何回呼び出されるかを確認してみてください。
OnCreateViewがログファイルから呼び出される理由を監視できます。
これをonCreateViewメソッド内に追加します。
Log.d("TAG", "onCreateView event : " + name);
私のlogcatなどはこれを生成します。
onCreateView : LinearLayout
onCreateView : ViewStub
onCreateView : FrameLayout
onCreateView : Android.support.v7.widget.ActionBarOverlayLayout
onCreateView : Android.support.v7.widget.ContentFrameLayout
onCreateView : Android.support.v7.widget.ActionBarContainer
onCreateView : Android.support.v7.widget.Toolbar
onCreateView : Android.support.v7.widget.ActionBarContextView
onCreateView : LinearLayout
onCreateView
呼び出し=レイアウト内のビューの数(各ビューを作成)