1.生明周期

onCreate->onStart->onResume->onPause->onStop->onDestroy

注意:当启动dialog或者dialog样式的activity的时候,之前的activity走onPause不会走onStop方法

2.启动模式

  • standard 被启动不管是否存在栈空间重新创建实例
  • singleTop 被启动只有当处于栈顶才会被重用,其他时候会创建实例
  • singleTask 被启动栈顶直接重用,不在栈顶处在这个activity上面的依次出栈然后重用,只要存在就不会创建实例
  • singleInstance 被启动会进入一个新的任务栈

3.启动-显示启动

启动的activity的方法最好定义在被启动的页面里边,并且声明好参数

companion object{fun actionStart(context:Context,param1:Int,param2:String){var intent=Intent(context,OtherActivity::class.java)intent.putExtra("param1",param1)intent.putExtra("param2",param2)context.startActivity(intent)}
}

companion object使用这个可以静态方法那样调用,但是actionStart 并不是真正的静态方法,内部只是创建了一个伴生类来实现这个调用的。如果想成为真正的静态方法需要添加@JvmStatic 这个注解。

需要下一个页面的返回值

 var intent=Intent(this,OtherActivity::class.java)intent.putExtra("param1",param1)intent.putExtra("param2",param2)startActivityForResult(intent,requestCode)

将数据传递回去

intent.putExtra("result",result)
setResult(RESULT_OK,intent)
finish()

在这里处理结果

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {super.onActivityResult(requestCode, resultCode, data)if (resultCode!=RESULT_OK){return}when(requestCode){REQUEST_CODE_1-> doActionREQUEST_CODE_2-> doAction}
}

4.隐式启动

启动一个网页

var intent=Intent(Intent.ACTION_VIEW)
intent.data= Uri.parse("https://baidu.com")
startActivity(intent)

我们自己的acitivity 也可以接这样的意图

<activity android:name=".OtherActivity" ><intent-filter tools:ignore="AppLinkUrlError"><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.LAUNCHER" /><data android:scheme="https"/></intent-filter></activity>

通过data指定协议就可以

5.安全退出应用程序

object ActivityManager {private val activityList=ArrayList<Activity>()fun addActivity(activity: Activity){activityList.add(activity)}fun removeActivity(activity: Activity){activityList.remove(activity)}fun finishAll(){for (activity in activityList){if (activity.isFinishing){activity.finish()}}activityList.clear()}
}

创建单例用于管理启动的Activity,定义删除所有Activity 的方法finishAll

open class BaseActivity :AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)Log.d("BaseActivity",javaClass.simpleName)ActivityManager.addActivity(this)}override fun onDestroy() {super.onDestroy()ActivityManager.removeActivity(this)}}
  • 定义基类用于,让其他所有的activity都实现这个,就能方便的管理Activity

  • Log.d(“BaseActivity”,javaClass.simpleName) 注意这个非常有用,当一个新的项目,不熟悉的时候加上这个启动应用程序可以清楚的看到页面启动了那个页面,便于定位功能属于哪个页面。

ActivityManager.finishAll()
android.os.Process.killProcess(android.os.Process.myPid())

退出应用的时候只需要调用这个就可以了。注意killProcess这里只能杀死本应用进程,不能杀死另外一个进程。

ProgressBar 这个view是原生的进度,可以设置style="?android:attr/progressBarStyleHorizontal" 来变成横向的。

6.异常退出,数据的持久化

override fun onSaveInstanceState(outState: Bundle) {super.onSaveInstanceState(outState)outState.putString("data1","数据持久化在这里")outState.putString("data2","哈哈")outState.putString("data3","从onCreate的bundle中读取")
}

当异常退出的时候,会执行这个方法,就可以在这个方法中持久化数据了

override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)if (savedInstanceState!=null){val data1 = savedInstanceState.getString("data1")val data2 = savedInstanceState.getString("data2")val data3 = savedInstanceState.getString("data3")Log.d(TAG,"data1=$data1  data2=$data2  data3=$data3")}
}

下次启动这个页面的时候就可以拿到持久化数据了

Kotlin-Activity技术点相关推荐

  1. 插件化Activity: 技术方案分享

    改不完的 Bug,写不完的矫情.公众号 杨正友 现在专注移动基础开发 ,涵盖音视频和 APM,信息安全等各个知识领域:只做全网最 Geek 的公众号,欢迎您的关注! 前言 插件化技术从 2015 年就 ...

  2. 使用Kotlin Native技术开发iOS应用

    AppCode简介 AppCode是JetBrains公司出品的用于开发Mac OS X以及iOS应用程序的集成开发环境,能够支持Xcode项目的运行和调试功能,并为Swift和Objective-C ...

  3. 启动 kotlin activity 编译报错

    android项目中添加了kotlin代码编写的activity,并试图启动该页面. 报错如下: C:\Users\15901\Desktop\ShangXueTang\app\src\main\ja ...

  4. 【Bugly 技术干货】Android开发必备知识:为什么说Kotlin值得一试

    1.Hello, Kotlin Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 1 ...

  5. Kotlin入门(2)让App开发变得更容易

    上一篇文章介绍了如何搭建Kotlin的开发环境,可是这个开发环境依然基于Android Studio,而在Android Studio上使用Java进行编码,本来就是理所应当的,何必还要专门弄个Kot ...

  6. JetBrains开发者日见闻(一)之Kotlin/Native 尝鲜篇

    简述: 今天我们来讲点Kotlin中比较时髦的东西,有的人可能会说:"不像你之前的风格啊,之前的文章不是一直在死扣语法以及语法糖背后秘密.当你还在死扣泛型语法的时候,别人的文章早就说了Kot ...

  7. Kotlin的独门秘籍Reified实化类型参数(下篇)

    Kotlin系列文章,欢迎查看: 原创系列: 有关Kotlin属性代理你需要知道的一切 浅谈Kotlin中的Sequences源码解析 浅谈Kotlin中集合和函数式API完全解析-上篇 浅谈Kotl ...

  8. 携程机票 Android Jetpack 与 Kotlin Coroutines 实践 | 开发者说·DTalk

    本文原作者: 禹昂,携程机票移动端资深工程师,Kotlin 中文社区核心成员,图书<Kotlin 编程实践>译者. 原文发布于: 携程技术 https://mp.weixin.qq.com ...

  9. 干货 | 携程机票 Android Jetpack 与 Kotlin Coroutines 实践

    作者简介 禹昂,携程机票移动端资深工程师,Kotlin 中文社区核心成员,图书<Kotlin 编程实践>译者. 一.前言 1.1 技术背景与选型 自 2017年 Google IO 大会以 ...

  10. Kotlin系列之let、with、run、apply、also函数的使用

    标签: Kotlin      常用技巧 目录: 一.回调函数的Kotin的lambda的简化 二.内联扩展函数之let 三.内联函数之with 四.内联扩展函数之run 五.内联扩展函数之apply ...

最新文章

  1. Console-算法-冒泡排序法|倒水法
  2. 看漫画学python电子书-看漫画还能学Python❓❓❓| 0基础小白福音
  3. 保持生长不焦虑,非科班程序媛的进击
  4. SAP 电商云 Spartacus UI 同 SAP Customer Data Cloud 集成运行时的 api
  5. java 循环拼接字符串用分号隔开_Java 8中字符串拼接新姿势:StringJoiner
  6. 【HDU - 1257】最少拦截系统 (标解dp,贪心可过,最长上升子序列类问题)
  7. 由炮灰模型到“微软钻石题”
  8. 带撤销贪心——cf1148F好题
  9. linux内核定时器 代码,Linux内核计时器
  10. python-opencv有效随机角度旋转
  11. [python]python jieba 模块
  12. 前端快来!最火的 Vue.js 开源项目出炉
  13. jQuery基础之jQuery和原生js实现tab选项卡和电影排行榜
  14. Sentinel 实战应用中的小技巧
  15. sql根据身份证计算年龄
  16. 佛系前端面试题记录--第八周
  17. Flutter AspectRatio 宽高比设定
  18. word行距设置教程
  19. 计算机基本原理问答题及答案
  20. 动视密码要输入8个字符怎么解决

热门文章

  1. 到底绿茶能不能减肥瘦小肚子? - 健康程序员,至尚生活!
  2. Kaggle案例之泰坦尼克船员幸存预测
  3. 【Python学习】timeit模块的使用
  4. 辛勤的蜜蜂永没有时间的悲哀
  5. 游程检验与秩和检验的Python实现
  6. python取模运算
  7. ES6 手写一个“辨色”小游戏
  8. 安卓状态栏美化相关教程
  9. XJOI 3879 怪兽繁殖
  10. 激流快艇2 PC版存档位置