內部Fragment設定為public static和checkReleaseBuilds false與abortOnError false
在維護一個老專案的時候,發現以前的Activity裡邊有一個內部Fragment繼承自DIalogFragment,但是這個內部Fragment沒有public和static修飾,Android Studio 智慧地發現了這個問題並給出了錯誤。雖然給出了錯誤提示,但是AndroidStudio竟然能正常的打包,檢視build.gradle發現了這句話
android {
lintOptions{
checkReleaseBuilds false
abortOnError false
}
}checkReleaseBuilds就是在打包Release版本的時候進行檢測,這裡就直接關掉了,這樣即使有報錯也不會停止打包了。這個也太簡單粗暴了。
還是按照規範設定內部fragment為public static 的吧。
這樣的話在fragment裡邊要訪問所屬activity的物件就通過getActivity然後強制型別轉換訪問,不能直接訪問了(static 訪問非static錯誤)。
注意兩點:
1、建議每個fragment都設定一個空的構造器,方便恢復狀態,有引數的構造器在恢復狀態的時候並不會呼叫。要給fragment傳遞引數,使用setArguments(Bundle)
2、非static內部類潛在會有記憶體洩露問題,因為其持有外部類的引用。static內部類不會持有外部類引用。
按照Lint的建議將內部類改成static靜態內部類後,由於不可能將當前類的所有全域性物件都宣告為static物件,所以會報“Cannot make a static reference to the non-static field”的錯誤,這時候可以使用軟引用來解決這個問題,具體程式碼如下:
public static class LoadDataHandler extends Handler{
private SoftReference<MainActivity> activitySRF = null;
public LoadDataHandler(MainActivity activity){
activitySRF = new SoftReference<MainActivity>(activity);
}
相關文章
- true || false && falseFalse
- C++程式設計師看過來,false < false的設定恰當嗎?C++程式設計師False
- Python解惑:True與FalsePythonFalse
- preventDefault()與return false區別False
- TIMED_STATISTICS 設定true 或 false 區別False
- Ruby中的true和falseFalse
- 不要用return false阻止event的預設行為False
- JavaScript return falseJavaScriptFalse
- 利用CheckForIllegalCrossThreadCalls=false設定跨執行緒訪問ROSthreadFalse執行緒
- js五種為false的判斷JSFalse
- null >=0 ? true:falseNullFalse
- WPF ClipToBounds True or falseFalse
- if 判斷為 false 的 6 種情況False
- HttpContext.User.Identity.IsAuthenticated 為falseHTTPContextIDEFalse
- js判斷true和false一覽JSFalse
- JavaScript return false的作用JavaScriptFalse
- if語句那些值可以被認為是falseFalse
- js中bool值為false的幾種情況JSFalse
- 陣列宣告為public final static缺陷陣列
- return false影響事件冒泡False事件
- 做「容量預估」可沒有true和falseFalse
- CSS 中 stopPropagation, preventDefault 和 return false 的區別CSSFalse
- display:none 和visible:false 的區別(轉)NoneFalse
- Integer128==128?falseFalse
- laravel Hash::check 始終返回false?LaravelFalse
- jQuey return false作用是什麼False
- "$err" : "not master and slaveok=false", "code" : 13435ASTFalse
- Spring Autowired(required = false) 說明SpringUIFalse
- Java解析並修改JSON:將isShow屬性改為falseJavaJSONFalse
- Hibernate 註解@Column(nullable = false) 和 @Column(unique=true)NullFalse
- JavaScript 比較相同的字元返回falseJavaScript字元False
- Android之android exported="false"作用AndroidExportFalse
- ajax的true非同步或者false同步非同步False
- php true false isset empty is_null array()PHPFalseNull
- 慎用ASP.Net的validateRequest="false"ASP.NETFalse
- EnableViewState="false"的DataGrid分頁 (轉)ViewFalse
- undefined與除去null的其他資料比較返回都是falseUndefinedNullFalse
- peewee 的 BooleanField 是翻譯為 tinyint(1) 還是 enum('true','false')?BooleanFalse