android面试题

android的动画有哪几种?他们的特点和区别是什么?

答:两种,一种是tween动画,一种是frame动画。tween动画,这种实现方式可以使视图组件移动,放大或缩小以及产生透明度的变化。frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。

handler进制的原理:

答:android提供了handler和looper来满足线程间的通信。Handler先进先出原则。looper用来管理特定线程内对象之间的消息交换(message Exchange).

1)looper:一个线程可以产生一个looper对象,由它来管理此线程里的message queue(消息队列)

2)handler:你可以构造一个handler对象来与looper沟通,以便push新消息到messagequeue里;或者接收looper(从messagequeue里取出)所送来的消息。

3)messagequeue:用来存放线程放入的消息。

4)线程:UI thread 通常就是main thread,而android启动程序时会为它建立一个message queue.

Activity的生命周期:

答:onCreate: 在这里创建界面,做一些数据 的初始化工作

onStart: 到这一步变成用户可见不可交互的

onResume:变成和用户可交互 的,(在activity 栈系统通过栈的方式管理这些个Activity的最上面,运行完弹出栈,则回到上一个Activity)

onPause: 到这一步是可见但不可交互的,系统会停止动画 等消耗CPU 的事情从上文的描述已经知道,应该在这里保存你的一些数据,因为这个时候你的程序的优先级降低,有可能被系统收回。在这里保存的数据,应该在

onstop: 变得不可见,被下一个activity覆盖了

onDestroy: 这是activity被干掉前最后一个被调用方法了,可能是外面类调用finish方法或者是系统为了节省空间将它暂时性的干掉

o设备横竖屏切换的时候,接下来会发生什么?

1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次

2、设置Activity的android:configChanges=”orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

3、设置Activity的android:configChanges=”orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

Android启动Service的两种方式是什么?

startService:生命周期与调用者不同。启动后若调用者未调用stopService而直接退出,Service仍会运行

bindService:生命周期与调用者绑定,调用者一旦退出,Service就会调用unBind->onDestroy

谈谈你对Android中Context的理解?

Context:包含上下文信息(外部值) 的一个参数. Android 中的 Context 分三种,Application Context ,Activity Context ,Service Context.

它描述的是一个应用程序环境的信息,通过它我们可以获取应用程序的资源和类,也包括一些应用级别操作,例如:启动一个Activity,发送广播,接受Intent信息等

.请介绍下AsyncTask的内部实现,适用的场景是?

AsyncTask内部也是Handler机制来完成的,只不过Android提供了执行框架来提供线程池来执行相应地任务,因为线程池的大小问题,所以AsyncTask只应该用来执行耗时时间较短的任务,比如HTTP请求,大规模的下载和数据库的更改不适用于AsyncTask,因为会导致线程池堵塞,没有线程来执行其他的任务,导致的情形是会发生AsyncTask根本执行不了的问题。

谈谈你对binder机制的理解?

binder是一种IPC机制,进程间通讯的一种工具. Java层可以利用aidl工具来实现相应的接口.

11.Android中进程间通信有哪些实现方式? Intent,Binder(AIDL),Messenger,BroadcastReceiver

介绍下实现一个自定义view的基本流程

1、自定义View的属性 编写attr.xml文件

2、在layout布局文件中引用,同时引用命名空间

3、在View的构造方法中获得我们自定义的属性 ,在自定义控件中进行读取(构造方法拿到attr.xml文件值)

4、重写onMesure

5、重写onDraw

Android多线程的实现方式有哪些?

Thread & AsyncTask

Thread 可以与Loop 和 Handler 共用建立消息处理队列

AsyncTask 可以作为线程池并行处理多任务

android 中线程与线程,进程与进程之间如何通信

1 、一个 Android 程序开始运行时,会单独启动一个 Process 。

默认情况下,所有这个程序中的 Activity 或者 Service 都会跑在这个 Process 。

默认情况下,一个 Android 程序也只有一个 Process ,但一个 Process 下却可以有许多个 Thread。

ndroid中五种数据存储方式分别是什么?他们的特点?

Android提供了五种存取数据的方式

(1)SharedPreference,存放较少的五种类型的数据,只能在同一个包内使 用,生成XML的格式存放在设备中

2) SQLite数据库,存放各种数据,是一个轻量级的嵌入式数据库

(3) File文件,通过读取写入方式生成文件存放数据

4) ContentProvider,主要用于让其他应用程序使用保存的数据

(5)通过网络获取数据和写入数据到网络存储空间

请介绍下ContentProvider是如何实现数据共享的。

创建一个属于你自己的Content provider或者将你的数据添加到一个已经存在的Content provider中前提是有相同数据类型并且有写入Content provider的权限。

注册广播有几种方式,这些方式有何优缺点?

ndroid广播机制(两种注册方法)

一种是代码动态注册

一种是在AndroidManifest.xml中配置广播

两种注册类型的区别是:

1)第一种不是常驻型广播,也就是说广播跟随程序的生命周期。

2)第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。

请解释下Android程序运行时权限与文件系统权限的区别。

运行时权限Dalvik( android授权)

文件系统 linux 内核授权


系统上安装了多种浏览器,能否指定某浏览器访问指定页面?

请说明原由。通过直接发送Uri把参数带过去,或者通过manifest里的intentfilter里的data属性

Android事件分发机制

Android中与事件分发相关的方法主要包括dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent三个方法,而事件分发一般会经过三种容器,分别为Activity、ViewGroup、View。下表对这三种容器分别拥有的事件分发相关方法进行了整理。

* 分发: dispatchTouchEvent如果返回true,则表示在当前View或者其子View(子子...View)中,找到了处理事件的View;反之,则表示没有寻找到

* 拦截: onInterceptTouchEvent如果返回true,则表示这个事件由当前View进行处理,不管处理结果如何,都不会再向子View传递这个事件;反之,则表示当前View不主动处理这个事件,除非他的子View返回的事件分发结果为false

* 消费: onTouchEvent如果返回true,则表示当前View就是事件传递的终点;反之,则表示当前View不是事件传递的终点

深入浅出反射

什么是反射?

  反射是一种能够在程序运行时动态访问、修改某个类中任意属性(状态)和方法(行为)的机制(包括private实例和方法),java反射机制提供了以下几个功能:

* 在运行时判断任意一个对象所属的类;

* 在运行时构造任意一个类的对象;

* 在运行时判断任意一个类所具有的成员变量和方法;

* 在运行时调用任意一个对象的方法。

  反射涉及到四个核心类:

* java.lang.Class.java:类对象

* java.lang.reflect.Constructor.java:类的构造器对象;

* java.lang.reflect.Method.java:类的方法对象;

* java.lang.reflect.Field.java:类的属性对象;

反射有什么用?

* 操作因访问权限限制的属性和方法;

* 实现自定义注解;

* 动态加载第三方jar包,解决android开发中方法数不能超过65536个的问题;

* 按需加载类,节省编译和初始化APK的时间;

反射工作原理

  当我们编写完一个Java项目之后,每个java文件都会被编译成一个.class文件,这些Class对象承载了这个类的所有信息,包括父类、接口、构造函数、方法、属性等,这些class文件在程序运行时会被ClassLoader加载到虚拟机中。当一个类被加载以后,Java虚拟机就会在内存中自动产生一个Class对象。我们通过new的形式创建对象实际上就是通过这些Class来创建,只是这个过程对于我们是不透明的而已。

  反射的工作原理就是借助Class.java、Constructor.java、Method.java、Field.java这四个类在程序运行时动态访问和修改任何类的行为和状态。

Java有几种基本数据类型?

a) byte,short,int,long,char,boolean,float,double


史上最精炼android四大组件基础总结(忘记了的可以过一遍)

Android基础知识总结

四大组件之一活动

活动状态

运行状态:活动处于栈顶

暂停状态:活动不处于栈顶,但仍然可见

停止状态:完全不可见

销毁状态:离开返回栈

生存期

onCreate()

onStart():不可见到可见调用

onResume():与用户进行交互,处于栈顶运行态

onPause():准备启动或者恢复另一活动,

onStop():完全不可见的时候调用

onDestory():被销毁之前调用,之后变为销毁状态

onRestart():这个方法由停止状态变为运行状态之前调用,也就是活动重新启动了

活动的启动模式

在配置文件Activity中配置launchMode属性

standard 默认每次启动一个新活动,它就会在返回栈中入栈,并处于栈顶位置。如果我们在一个Activity中跳转自己。点击两次创建之后,我们需连按三次Back建才能退出程序。

singleTop

解决了默认情况下,在栈顶还要创建不合理。也就是如果Activity处于栈顶不创建,不处于栈顶就会重新创建。

singleTask

解决一个栈中有多个Activity实例,也就是如果发现已经存在栈中就把这活动之上的统统出栈,没有则创建

singleInstance

指定为该模式的活动会启动一个新的返回栈来管理这个活动。

四大组件之二广播

标准广播:异步执行的广播

有序广播:同步执行的广播(对于广播接收器是有先后顺序)

接收系统广播

动态注册监听网络变化

在代码中注册为动态注册

在AndroidManifest.xml文件中注册时静态注册

四大组件之三服务

onCreate():在服务创建的时候调用

onStartCommand()方法会在每次服务启动的时候调用

onDestory()方法会在服务销毁的时候调用(回收不再使用的资源)

需要在AndroidManifest.xml文件中注册才能生效

启动和停止服务

主要也是借助Intent来实现的

启动服务

 startService(new Intent(this,MyService.class))

停止服务

 stopService(new Intent(this,MyService.class))

服务的生命周期

onCreate() 服务之前没有创建过就会先执行

onStartCommand()方法执行每次调用startService()就会执行。但是还是只存在一个实例

onBind():在Context的bindService()调用时就会执行该方法

onDestory(): 调用startService后再调用stopService()时就会执行,调用bindService 后又调用unbindService()也会执行

当调用了startService()又调用bindService()此时只有当两个同时调用stopService和unbindService().onDestory()才会执行。


内容提供器Content Provider

内容提供器简介

为了在应用程序之间交换数据,Android提供了ContentProvider,

ContentProvider是不同应用程序之间进行数据交换的标准API,

当一个应用程序需要把自己的数据暴露给其他程序使用时,

该应用程序就可通过提供ContentProvider来实现,其他应用程序可通过ContentResolver

来操作ContentProvider暴露的数据,

包括增加数据

删除数据

修改数据

查询数据等。

ContentProvider也是Android应用的四大组件之一,

需要在AndroidManifest.xml文件中进行配置.

在A应用编写ContentProvider,

在B应用

调用getContentResolver,获取resolver对象

调用insert(),delete(),update(),query(),传入URI实现数据访问

你可能感兴趣的:(android面试题)