我写了一个小程序,看起来像这样:
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.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.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级上运行
答案 0 :(得分:47)
您已使用Activity
扩展了课程。这意味着你的班级&#39;生命周期如下。
因此,onCreateView不是活动的生命周期方法。它只是一个成员方法,将用于指定的任务,如文档中所述。
标准实施 在充气时使用android.view.LayoutInflater.Factory.onCreateView 使用getSystemService返回的LayoutInflater。这个 实施什么都不做,是为了 pre-android.os.Build.VERSION_CODES.HONEYCOMB apps。较新的应用程序应该 使用onCreateView(View,String,Context,AttributeSet)。
依赖于在Activity中调用onCreateView()是不好的编程。
如果您使用Fragment
扩展到您的类并编写了onCreateView()方法,则只有在onAttach()和onDestroyView()之后才会调用它,如果您仍然在同一个片段上。< / p>
见此图。
在这里,它是Fragment的生命周期方法。
所以,你正在测试错误的假设。这就是全部!
答案 1 :(得分:3)
Android Framework使用Dependencies注入机制当布局文件被夸大时。我认为由于这个onCreateView被调用了很多次。对此的公式可能如下所示
尝试删除setContentView并查看onCreateView被调用的次数。您可能会对它有所了解。
答案 2 :(得分:0)
onCreateView
次调用=布局中的视图数量(创建每个视图)
答案 3 :(得分:0)
您可以从日志文件中监视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