Activity是android的四大组件之一,也是学习android的重中之重,所以本文将详细介绍Activity相关的知识
Activity生命周期
Activity 启动方式
Activity 原理
Activity生命周期
说明:上图表示第一次生命周期
针对生命周期情况描述:
- 当进程切换到后台:onResume->OnPause->onStop 切换回来的时候 onStop->onStart->OnResume
- 当使用back键进行回退时,onResume->onPause->onDestory
- onStart 和onStop代表是否可见 不可以操作 ,onResume和onPause 也是可见 代表是否位于前台 可以操作、
- 当Activity A启动Activity B,流程是 A onPause-> B onCreate->B onStart -> B onResume ->A onStop,所以尽量不要在onPause中执行太多耗.时的操作。onStop也不要尽量耗时
Activity 启动方式
Activity 启动方式有两种,一种是隐式启动,一种是显示启动,一般程序内调用使用显示启动,如果你的应用需要启动第三方引用那么使用隐式启动。
显示启动例子:
Intent intent=new Intent(AActivity.this,BActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Intent 是一个消息传递对象,您可以使用它从其他应用组件请求操作,主要用于
启动 Activity :startActivity(intent); [startActivityForResult()](https://developer.android.com/reference/android/app/Activity.html#startActivityForResult(android.content.Intent, int))
启动服务: startService() [bindService()](https://developer.android.com/reference/android/content/Context.html#bindService(android.content.Intent, android.content.ServiceConnection, int))
传递广播:sendBroadcast() [sendOrderedBroadcast()](https://developer.android.com/reference/android/content/Context.html#sendOrderedBroadcast(android.content.Intent, java.lang.String))或 sendStickyBroadcast()
Intent主要信息:
组件名称:要启动的组件名称(可选),有名称是显示,没名称是隐式 对应的属性是�ComponentName对象,可以使用 setComponent()、[setClass()](https://developer.android.com/reference/android/content/Intent.html#setClass(android.content.Context, java.lang.Class<?>))、[setClassName()](https://developer.android.com/reference/android/content/Intent.html#setClassName(java.lang.String, java.lang.String)) 或 Intent构造函数设置组件名称
注意:启动service,必须指定组件名称,否则无法�确定哪项serivice会响应intent
操作:指定要执行的通用操作(例如,“查看”或“选取”)的字符串。
ACTION_VIEW:比如需要使用图库查看照片,使用地图查看地址
ACTION_SEND:共享Intent,比如分享,发送邮件等
可以使用 setAction()或 Intent构造函数为 Intent 指定操作
数据�:引用待操作数据和/或该数据 MIME 类型的 URI,可能是设备以外的资源,如某个网页URL,指向某个文件的URI,或是ContentProvider中某条记录的某个内容的URI
指定数据的 MIME 类型有助于 Android 系统找到接收 Intent 的最佳组件,
Intent intent=new Intent();
intent.setType("text/plain");//设置类型
intent.setData(Uri);//设置数据
intent.setDataAndType(Uri.fromFile(file),type);//设置数据以及类型
注意:若要同时设置 URI 和 MIME 类型,请勿调用 setData()和 setType(),因为它们会互相抵消彼此的值。请始终使用 [setDataAndType()](https://developer.android.com/reference/android/content/Intent.html#setDataAndType(android.net.Uri, java.lang.String))同时设置 URI 和 MIME 类型
类别
Extra
标志