2014-06-11 15 views
20

Tôi đã viết một chương trình nhỏ nhìn như thế này:Phương thức onCreateView được gọi khi nào? và bao nhiêu lần trong vòng đời Hoạt động?

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"); 
    } 
} 

nào là hoạt động chính.

Các LogCat là:

06-11 07: 07: 10,033: D/com.example.lifecycle.LifeLogger (600): onCreateView sự kiện ngày 06-ngày 11 tháng 7: 07: 10,033: D /com.example.lifecycle.LifeLogger(600): onCreateView sự kiện 06-11 07: 07: 10.043: D/com.example.lifecycle.LifeLogger (600): onCreateView sự kiện 06-11 07: 07: 10.053: D /com.example.lifecycle.LifeLogger(600): onCreateView sự kiện 06-11 07: 07: 10.063: D/com.example.lifecycle.LifeLogger (600): onCreateView sự kiện 06-11 07: 07: 10.063: D/com.example.lifecycle.LifeLogger (600): onCreateView sự kiện 06-11 07: 07: 10.063: D/com.example.lifecycle.LifeLogger (600): onCreateView sự kiện 06-11 07: 07: 10.063: D/com.example.lifecycle.LifeLogger (600) : onCreateView event 06-11 07: 07: 10.073: D/com.example.lifecycle.LifeLogger (600): onCreateView sự kiện 06-11 07: 07: 10.073: D/com.example.lifecycle.LifeLogger (600) : onCreateView sự kiện 06-11 07: 07: 10.083: D/com.example.lifecycle.LifeLogger (600): onCreateView sự kiện 06-11 07: 07: 10.083: D/com.example.lifecycle.LifeLogger (600): onCreateView sự kiện 06-11 07: 07: 10.083: D/com.example.lifecycle.LifeLogger (600): onCreateView sự kiện 06-11 07: 07: 10.093: D/com.example.lifecycle.LifeLogger (600): onCreat eView event 06-11 07: 07: 10.093: D/com.example.lifecycle.LifeLogger (600): onCreateView sự kiện 06-11 07: 07: 10.093: D/com.example.lifecycle.LifeLogger (600): onCreateView event 06-11 07: 07: 10.103: D/com.example.lifecycle.LifeLogger (600): onCreateView sự kiện 06-11 07: 07: 10.113: D/com.example.lifecycle.LifeLogger (600) : onCreateView sự kiện 06-11 07: 07: 10.113: D/com.example.lifecycle.LifeLogger (600): onCreateView sự kiện 06-11 07: 07: 10.113: D/com.example.lifecycle.LifeLogger (600): onCreate event 06-11 07: 07: 10.113: D/com.example.lifecycle.LifeLogger (600): sự kiện onStart 06-11 07: 07: 10.113: D/com.example.lifecycle.LifeLogger (600): onResume sự kiện 06-11 07: 07: 10.193: D/com.example.lifecycle.LifeLogger (600): onCreateView event 06-11 07: 07: 10.223: D/gralloc_goldfish (600): Trình giả lập không phát hiện mô phỏng GPU. 06-11 07: 08: 19.633: D/com.example.lifecycle.LifeLogger (600): onPause event 06-11 07: 08: 20.213: D/com.example.lifecycle.LifeLogger (600): sự kiện onStop 06-11 07: 08: 31.993: D/com.example.lifecycle.LifeLogger (600): onRestart sự kiện 06-11 07: 08: 31.993: D/com.example.lifecycle.LifeLogger (600): onStart sự kiện 06-11 07: 08: 31.993: D/com.example.lifecycle.LifeLogger (600): onResume event 06-11 07: 08: 51.073: D/com.example.lifecycle.LifeLogger (600): onPause sự kiện 06-11 07: 08: 52.963: D/com.example.lifecycle.LifeLogger (600): onStop sự kiện 06-11 07: 08: 54.043: D/com.example.lifecycle.LifeLogger (600): sự kiện onDestroy

Điều gì đã xảy ra ở đây? tại sao onCreateView lại được gọi nhiều lần?

Thời gian của onCreateView là gì?

Cảm ơn.

update:

xml thổi phồng:

<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> 

các manifast:

<?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> 

chạy trên mức api android 16

+0

Tôi có thể xem tập tin activity_life_logger.xml bạn – Asheesh

+0

thấy vòng đời hoạt động. http://developer.android.com/reference/android/app/Activity.html – Raghunandan

+0

Cố gắng đăng nhập tên của chế độ xem được tạo như sau: 'Log.d (TAG," onCreateView event: "+ name);'. Sau đó, chúng ta có thể xem các chế độ xem đang được thêm vào. – Manu

Trả lời

38

Bạn đã mở rộng lớp học của mình với Activity. Điều đó có nghĩa là vòng đời của lớp học của bạn sẽ như sau.

enter image description here

Vì vậy, onCreateView không phải là một phương pháp vòng đời cho hoạt động. Nó chỉ là một phương pháp thành viên sẽ được sử dụng cho các nhiệm vụ cụ thể như đã nói trong doc.

thực hiện Tiêu chuẩn android.view.LayoutInflater.Factory.onCreateView sử dụng khi lạm phát với LayoutInflater trả về bởi getSystemService. Triển khai này không hoạt động và dành cho ứng dụng pre-android.os.Build.VERSION_CODES.HONEYCOMB. Các ứng dụng mới hơn nên sử dụng onCreateView (Xem, Chuỗi, Ngữ cảnh, Thuộc tính).

Để dựa vào cuộc gọi của onCreateView() trong một Hoạt động là lập trình kém.

Nếu bạn đang sử dụng Fragment mở rộng cho lớp học của bạn và đã viết onCreateView() phương pháp, sau đó nó sẽ được gọi là chỉ hai lần sau khi onAttach của bạn() và onDestroyView() nếu bạn vẫn còn trên cùng một mảnh.

Xem biểu đồ này.

enter image description here

Ở đây, đó là một phương pháp vòng đời cho Fragment.

Vì vậy, bạn đang thử nghiệm với các giả định sai. Đó là tất cả!

3

Android Khung sử dụng cơ chế phun Dependencies Khi bố trí tập tin được thổi phồng.Tôi nghĩ rằng do onCreateView này được gọi là rất nhiều lần. mula cho điều này có thể là như sau

  • không xem trong layout xml == không có các cuộc gọi đến onCreateView

Cố gắng loại bỏ setContentView và xem bao nhiêu lần onCreateView là called.You có thể nhận được một số hiểu biết sâu sắc về nó.

0

onCreateView cuộc gọi = số lần xem trong cách bố trí (tạo ra từng xem)

0

Bạn có thể giám sát các lý do onCreateView được gọi từ một tập tin log:

thêm bên trong phương pháp onCreateView của bạn này:

Log.d("TAG", "onCreateView event : " + name); 

chẳng hạn như logcat của tôi sản xuất này;

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 
Các vấn đề liên quan