您的位置:首页 > 移动开发 > Android开发

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

4、onStop,onDestroy分析

Activity如何设置不可见状态:在updateVisibility方法中更新

onDestroy真的销毁了Activity
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android