android面试基础部分

 Activity启动模式

standard、singleTop、singleTask、singleInstance

Standard:默认启动模式,startactivity后会重新创建一个新的activity;

singleTop:当前栈中已有该Activity的实例并且该实例位于栈顶时,不会新建实例,而是复用栈顶的实例;

singleTask:如果栈中存在实例,则将它上面的Activity实例都出栈,然后回调启动的Activity实例的onNewIntent方法;

singleInstance:有singleTask的特性并且Activity会单独占用一个Task栈,在整个系统中是单例的。

生命周期

onCreate、onStart、onResume、onPause 、onStop、onRestart 、onDestroy 。

四大组件

activity

是最基本必须会的,如何创建,注册,以及常用的几种activity的属性的使用。

service

(1)service用于在后台完成用户指定的操作。service分为两种:

(a)started(启动):当应用程序组件(如activity)调用startService()方法启动服务时,服务处于started状态。

(b)bound(绑定):当应用程序组件调用bindService()方法绑定到服务时,服务处于bound状态。

(2)startService()与bindService()区别:

(a)started service(启动服务)是由其他组件调用startService()方法启动的,这导致服务的onStartCommand()方法被调用。当服务是started状态时,其生命周期与启动它的组件无关,并且可以在后台无限期运行,即使启动服务的组件已经被销毁。因此,服务需要在完成任务后调用stopSelf()方法停止,或者由其他组件调用stopService()方法停止。

(b)使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特点。

broadcast receiver

(1)你的应用可以使用它对外部事件进行过滤,只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力,例如闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。

(2)广播接收者的注册有两种方法,分别是程序动态注册和AndroidManifest文件中进行静态注册。

(3)动态注册广播接收器特点是当用来注册的Activity关掉后,广播也就失效了。静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用。

content provider

android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。

Handler机制的大致流程以及Message、Handler、MessageQueue、Looper之间的关系

1.在Looper.loop()方法运行开始后,循环的按照接收顺序取出MessageQueue里面的非NULL的Message。

2.一开始MessageQueue里面的Message都是NULL的,当Handler.sendMessage(Message)到MessageQueue,该函数里面设置了那个Message对象的target属性是当前Handler对象。随后Looper取出了那个Message,则调用该Message的target指向的Handler的dispatchMessage函数对Message进行处理。在dispatchMessage方法里,如何处理Message则由用户指定,三个判断,优先级从高到低:

1)Message里面的Callback,一个实现了Runnable接口的对象,其中run函数做处理工作

2)Handler里面的mCallback指向的一个实现了Callback接口的对象,由其handleMessage进行处理。

3)处理消息Handler对象对应的类继承并实现了其中handleMessage函数,通过这个实现的handleMessage函数处理消息。

4)Handler处理完该Message后,Looper则设置该Message为NULL,以便回收。

 

简单的说,Handler获取当前线程中的looper对象,looper用来存放从MessageQueue中取出的Message,再由Handler进行Message分发和处理,按照先进先出执行。

MessageQueue(消息队列):用来存放通过Handler发送的消息,通常附属于某一个创建它的线程,可以通过Looper.myQueue()得到当前线程的消息队列。

Handler:是Message的主要处理者,负责Message的发送,Message内容的执行处理。例如将消息发送到消息队列(sendMessage),更新UI组件(实现该类的handleMessage方法)

Looper:是Handler和消息队列之间的通讯桥梁,程序组件首先通过Handler把消息传递给Looper,Looper把消息放到队列。Looper也把消息队列里的消息广播给所有的Looper。

Message:消息的类型,理解为线程间交流的信息,处理数据后台线程需要更新UI,在Handler类中的handleMessage方法中得到单个的消息进行处理。

动画

补间动画::alpha(渐变)、scale(缩放)、translate(位移)、rotate(旋转)

逐帧动画:使其连续播放而成动画。

属性动画:ValueAnimator 类 & ObjectAnimator 类ValueAnimator类实现属性动画

暂时基础想到的就这些后面有时间在补充完善。

猜你喜欢

转载自blog.csdn.net/xue_tianyou/article/details/81331549