Android关于Activity

来源:互联网 发布:多目标优化 百度百科 编辑:程序博客网 时间:2024/06/08 10:19

一、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层的类介绍-ActivityThread
1)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:显示过程控制,控制界面什么时候显示和移除,客户端代理的一个对象。

4、onStop,onDestroy分析
Activity如何设置不可见状态:在updateVisibility方法中更新
onDestroy真的销毁了Activity

0 0
原创粉丝点击