Android关于Activity
2016-03-14 09:25
555 查看
一、Activity本质是什么
承载界面的框架二、Activity的生命周期
1、一个Activitry生命周期:
显示状态:create、start、resume
看不见状态:pause、stop
销毁状态:destory
2、多个Activity交互的生命周期
A打开B时
3、Activity生命周期交互设计思想
1)为什么要先暂停当前显示的Activity?
eg:如果有视频播放时,有电话进来,则电话声和视频声在一起
2)为什么要先执行要打开的Activity的onCreate,onStart,onResume方法?
3)再打开新的Activity的时候,为什么不先执行当前Activity的onPause,onStop方法呢?
安全保护机制,如果启动SecondActivity有异常,则会被crush闪退,mainActivity又处于不可见(onStop)状态,则用户会看到黑屏
三、屏幕切换与应用场景
1、横竖屏切换1)、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2)设置Activity的android:configChanges=”orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
3)设置Activity的android:configChanges=”orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法
新生命周期
2、生命周期应用场景
在onPause、onResume方法中写
四、启动Activity
1、Activity启动的两种方式1)直接启动
2)匿名启动:启动其他app
Category属性用于指定当前动作(Action)被执行的环境
<intent-filter> <action android:name="www"></action> <category android:name="android.intent.category.DEFAULT"></category> </intent-filter>
@Override public void onClick(View view) { Intent intent = new Intent(); intent.setAction("www"); startActivity(intent); }
2、启动系统常见的Activity
启动系统浏览器
intent.setAction(Intent.ACTION_VIEW); Uri url=Uri.parse("http://www.baidu.com"); intent.setData(url); startActivity(intent);
启动相册
intent.setAction(Intent.ACTION_GET_CONTEXT); intent.setType("image/*") intent.setData(url); startActivity(intent);
发送短信
intent.setAction(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_TEXT,"hello"); startActivity(intent);
启动电话界面
intent.setAction(Intent.ACTION_VIEW); Uri url=Uri.parse("tel:123456"); intent.setData(url); startActivity(intent);
五、Activity中的任务栈
1、Activity的Task和启动模式1)Task(任务)
2)Back Stack(后台任务栈)
<activity android:name=".FirstActivity" android:process=":FirstActivity"></activity>
3)adb查看Activity命令
shell dumpsys activity
Running activities显示当前活动的Activity
4)android:launchMode
(1)standard
(2)singleTop:栈顶A,启动它自己不会重新创建
(3)singleTask:只能存在一个唯一的实例
(4)singleInstance:创建一个新的任务栈
六、FrameWork介绍
1、Framework层的类介绍-ActivityThread1)ActivityThread是什么
(1)它本身不是一个线程
(2)ActivityThread如何被启动?
它运行在Activity进程中的一个主线程方法中,先调用main,创建一个消息轮询对象Looper.prepareMainLooper(),在创建一个自己的对象ActivityThread thread = new ActivityThread();再调用自己的thread.attach(false)方法,进行相关处理,最后调用Looper.loop()轮询。
(3)ActivityThread启动完成后如何通知AMS?
IactivityManager mar = ActivityManagerNative.getDefault();
mgr.attachApplication(mAppThread);
2、ApplicationThread相关类介绍
ApplicationThread
ActivityClientRecord:activityInfo有主题,权限,目标信息等
ActivityRecord:ActivityManagerService存储Activity记录
3、Context类介绍
Activity相关的所依赖的环境,实则是一个接口
七、FrameWork介绍
1、Activity是什么和其他类有什么区别作为一个整体框架、控制,Activity中的生命周期为了控制界面显示,由FrameWork作统一处理(比如进程间通信、生命周期)
2、Activity的生命周期的方法是什么时候回调的
Instrumentation:打开Activity的各种生命周期的方法,创建Application
ActivityManagerNative:操纵远程的Activity服务进行通信
H hanlder:处理Activity服务发送来的具体消息
3、Activity、Window、WindowManger三者之间的关系
Activity作为控制结构(View是显示的一个布局、Mode就是对应的展示的数据)负责界面的一个控制。
Window:view添加在Window对象中
WindowManger:显示过程控制,控制界面什么时
4000
候显示和移除,客户端代理的一个对象。
4、onStop,onDestroy分析
Activity如何设置不可见状态:在updateVisibility方法中更新
onDestroy真的销毁了Activity
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories