首頁>技術>

一、內容提要

在一個Android專案中Application基本上必不可少,我們可以在Application中做一些初始化的動作,如:定義全域性的Context、初始化全域性集合(用來關閉Activity)、初始化第三方庫等。Kotlin的Application和Java的Application略微有差異,主要的差異在於對Application內容的訪問上。在Java中我們可以定義一個屬性,用static關鍵字修飾就可以了,但是在Kotlin中卻不被執行,而需要改用Kotlin提供的伴生物件(companion object)。接下來通過實戰來講解一下如何通過Kotlin的類名來訪問Appplication中的內容。

二、實戰部分

程式碼比較簡單,我直接貼上去,然後用到相關內容我會以註釋的形式貼出來

/** * 基礎Application,可直接用也可以讓別的Application繼承這個BaseApplication * create by yangwei * on 2020/7/21 16:10 */class BaseApplication : Application() { \t//ActivityUtil主要用於管理Actiivty的,如關閉、新增、頁面跳轉等 //由於ActivityUtil屬性只是在初始化的時候使用,所以此處定義為private關鍵字讓外部不可見 //有由於我們要對齊初始化所以預先定義為一個可空物件(比較符合java習慣) //如果不想這樣做可以使用by lazy或者lateinit關鍵字對ActiivtyUtil進行初始化 private var activityUtil: ActivityUtil? = null override fun attachBaseContext(base: Context?) { super.attachBaseContext(base) \t\t//把當前物件賦值給App例項 app = this } override fun onCreate() { super.onCreate() \t//對ActivityUitl進行初始化 activityUtil = ActivityUtil() } /** * Kotlin中的伴生物件 \t此處需要重點說明一下:此處為Kotlin語言特有的伴生物件,其可以替代Java中static關鍵字的 作用,凡事被companion object{}程式碼塊包裹開放內容均可以通過BaseApplication.進行 訪問,有點像類名.方法名的味道,也可以把這塊程式碼塊看做成一個類的靜態方法,這樣相對於 有java基礎的同學來說更加好被理解 */ companion object { private var app: BaseApplication? = null fun app(): BaseApplication? { return app } } /** * 獲取操作Activity的工具類 */ fun getActivityManager(): ActivityUtil? { return activityUtil }}
三、注意事項

1.注意文中的伴生物件的使用companion object{},它相當於java的static關鍵字的功能,在我們的日常開發中會經常性的用得到。

2.(基礎)自己定義的BaseApplication一定要在AndroidManifest.xml中進行註冊,不然執行時報錯

 <application android:name=".BaseApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme">

3.一個程序中只有一個Application可以把其看做成單例,他的生命週期是app程序的生命週期。ps:app開啟多程序後唯一Application規則被打破(面試經常會和單例一塊問道)

結束語

  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 8個用於資料探勘的最佳開源工具