首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 「Unfortunately, app has stopped」崩潰分析:requestFeature 必須在 setContentView 之前調用

     編輯:程式設計綜合問答

錯誤現象

應用在模擬器與真機上均啟動即閃退,LogCat 顯示:

java.lang.RuntimeException: Unable to start activity ... 
Caused by: android.util.AndroidRuntimeException: requestFeature() must be called before adding content

錯誤原因

在 Activity.onCreate() 中,requestWindowFeature(Window.FEATURE_NO_TITLE) 呼叫位於 setContentView() 之後。Android 要求視窗特性必須在佈局加載前設定。

修正代碼

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 1. 先請求視窗特性
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                         WindowManager.LayoutParams.FLAG_FULLSCREEN);
    // 2. 再設定佈局
    setContentView(R.layout.your_layout_filename);
    // 3. 初始化 UI 元件
    mDrawOnTop = new DrawOnTop(this);
    mPreview = new Preview(this, mDrawOnTop);
    setContentView(mPreview);
    addContentView(mDrawOnTop, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
}

最佳實踐

  • 永遠在 super.onCreate() 之後、setContentView() 之前呼叫 requestWindowFeature()。
  • 若使用 ActionBar 或 Toolbar,同樣遵循此順序。

延伸閱讀

官方文檔 Activity.requestWindowFeature 明確規定:「Must be called before adding content.」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved