1.Activity
1.1Activity生命週期
- onCreate()會在Activity第一次被創建的時候調用。
你應該在這個方法中完成Activity的初始化操作 - onStart()這個方法再Actity由不可見的時候調用
- onResume() 這個方法再Activity準備好和用戶進行交互時調用
此時Activity一定位於棧頂,並處於運行狀態 - onPause()這個方法再系統準備啓動或恢復另一個Actity的時候調用。
我們通常會再這個方法中將一些消耗cpu的資源釋放掉,以及保存一些關鍵數據
但這個方法執行速度一定要快,不然會影響到新的棧頂 - onStop()這個方法在Activity完全不可見的時候調用
它和onPause()的區別在於,如果啓動的新的Activity是一個對話框式的Activity,那麼onPause()會執行,而onStop()不會執行 - onRestart()這個方法在Activity由停止變爲運行狀態之前調用,也就是Activity被重新啓動了
以上7個方法又可以分爲以下3種生存期
完整生存期 onCreate()和onRestart()
可見生存期 onStart()和onStop()
前臺生存期 onResum()和onPause()
1.2Activity啓動模式
1.standard 默認啓動模式 每當啓動一個新的Activity,它就會在返回棧種入棧,並處於棧頂每次啓動都會
創建一個該Activity的新實例
2.singleTop 在啓動Activity時如果發現返回棧的棧頂已經是該Activity,則直接使用它,不會創建Activity
的新實例
3.singleTask 每次啓動該Activity時,系統都會在返回棧種檢查是否存在該Activity實例,如果發現有
則直接使用 ,並把這個Activity上所有其他Activity統統出棧
4.singleInstance 會有一個單獨的返回棧來管理這個Activity。不管哪個應用程序調用這個Activity,
都會共用一個返回棧
在 中添加android:launchMode來選擇啓動模式
示例
<activity android:name=".MainActivity" android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
1.3Activity傳遞數據
class SecondActivity : AppCompatActivity() {
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when(requestCode){
1 -> if(resultCode == Activity.RESULT_OK){
//
val returnedData = data?.getStringExtra("extra_return")
Toast.makeText(this,returnedData,Toast.LENGTH_SHORT).show()
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
web.setOnClickListener {
val intent=Intent(Intent.ACTION_VIEW)
intent.data= Uri.parse("http://www.rshome.xn--ses554g/")
startActivity(intent)
}
phone.setOnClickListener {
val intent=Intent(Intent.ACTION_DIAL)
intent.data = Uri.parse("tel:10086")
startActivity(intent)
}
tranf.setOnClickListener {
val intent = Intent(this,ThirdActivity::class.java)
intent.putExtra("extra_data","爺問你話呢!?")
// startActivity(intent)
startActivityForResult( intent,1)
}
}
//Activity被回收前調用,用來保存數據
override fun onSaveInstanceState(outState: Bundle, outPersistentState: PersistableBundle) {
super.onSaveInstanceState(outState, outPersistentState)
val TempData = "用來保存被銷燬前的數據的"
outState.putString("data_key",TempData)
}
修改onCreate()添加以下代碼
...
if(savedInstanceState!=null){
val tempData = savedInstanceState.getString("data_key")
//獲得Activity被銷燬前保存到數據
}
...
/*
Activity最佳實踐
1.知道自己在哪個Activity中
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
Log.d("BaseActivity",javaClass.simpleNaame)
}
kotlin中BaseActivity::Class.java相當於獲取BaseActivity類的class對象 相當於BaseActivity.class
javaClass表示獲取當前實例的Class對象,simpleName獲取當前實例的類名
2.隨時隨地退出程序
新建一個單例類ActivityCollector
object ActivityCollector{
private val activitys = ArrayList<Activity>()
fun addActivity(activity : Activity){
activitys.add(activity)
}
fun removeActivity(activity : Activity){
activitys.remove(activity)
}
fun finishAll(){
for(activity in activities){
if(!activity.isFinishing){
activity。finish()
}
}
}
}
}
*/
1.4啓動Activity最佳寫法
解決需要傳入參數標準問題
class SecondActivity : BaseActivity(){
companion object{
fun actionStart(context : Context,data1 : String,data2 : String){
val intent=Intent(context,SecondAActivity::class.java)
intent.putExtra(“param1”,data1)
intent.putExtra(“param2”,data2)
context.startActivity(intent)
}
}
Kotlin課堂 標準函數和靜態方法
Kotlin課堂 標準函數和靜態方法
1.1. with
val result = with(obj){
//這裏時obj上下文
"value"// with 函數的返回值
}
1.2 run
val result = obj.run{
//這裏時obj上下文
"value"// run 函數的返回值
}
1.3 apply
val result = obj.apply{
//這裏時obj上下文
}
// result == obj
** 定義靜態方法**
kotlin弱化了靜態方法,提供了更好的解決方法,單例類
1.1註解
在單例類或companion object中加入@JvmStatic注
class Util{
companion object{
@JvmStatic
fun do(){
println("do static")
}
}
}
1.2頂層方法
創建一個Kotlin文件,在次文件定義任何方法都是頂層方法。都會編譯成靜態方法