自己总结的android面试题

Android面试题--自己总结的

ContentProvider部分相关如下:

1.说说ContentProvider与Android数据存储的关系?

答案:作为数据的一个提供者,把数据提供给其他应用程序。(相当于提供数据的接口)

2.ContentProvider对象何时被实例化?

答案:系统初始化的时候自动实例化

3.ContentProvider数据模型画出来?(类似于一张表)

答案: 分三层 一、数据存储 二、提供数据中间件contentProvider(增删改查) 三、 App调用

4.ContentProvider的机制是什么?

答案: 此应用程序在安装和卸载的时候就会分别 regist 和unregist 到providerManager里面供其他应用程序的ContentResolver 来访问

5.ContentProvider试用步骤?

1.定义provider

2.注册provider 注意进程间通信

<provider

android:name=".MyContentProvider"

android:authorities="qyj.contentprovder.MyContentProvider"

android:multiprocess="true">

</provider>

6.列举系统提供的几个ContentProvider

Brower、Calllog 、ContatsContract、Calender、MediaStore、Settings、userDictionary Activity部分相关如下:

1.activity作用以及定义?

官方定义:activity是Android应用程序提供交互界面的一个重要组件。也是android最重要的组件之一

官方定义不是特别准确:

Activity是业务类,是承载应用程序的界面以及业务行为的基础包括UI、Service ??类似于javaBean

2.口述Activity Window View 三者之间的关系 (提示压力泵layoutinflate)

3.事件上传机制view最先接到事件 传给 Window 然后Window分发出去(keyEvent和 touchEvent)

4.请描述一下Activity的生命周期?(理解记忆那张图)

自己总结的android面试题

5.请描述一下横竖屏切换时候的Activity的生命周期?

整个activity的生命周期(可以去控制不执行哪个方法)

用法:

1.重写onConfigurationChanged()

2.横竖屏改变需要<activity android:name=".LifeActivity" android:configChanges="orientation" >

6.什么是TASK?

Task就是多个activity按照顺序组成的一个业务逻辑-----不是官网的定义是自己的总结

7.描述一下Activity的Tast Stack模型?(详细解释上官网看activity)

diagram_backstack(同一个进程的activity也就是单个任务栈):

自己总结的android面试题

diagram_multitasking(不同进程的activity也就是多个个任务栈):

自己总结的android面试题

8.Intent是什么?

包含的内容:

compnentName 要启动的组件(比如activity、Service??) Action 过滤条件intentfilter里面的字符串

Data 要与intentfilter里面指定的data前缀格式一样才行 Category 类别

Extras 附加

Flags 标记

9.Activity如何保存和恢复?(一般用在进程被杀死的时候) 当进程干掉的时候才有可能去调onRestoreInstanceState()

自己总结的android面试题

10.startActivity机制?(看源码-----返回值的应用(返回得到date 例子:拍照返回图片)

11.startActivity为什么要用IBinder(IPC进程间通信机制) 来启动?

启动的activity有可能不在同一个进程当中

12.intent-filter的用法(启动activity的时候过滤)?

<activity android:name=".RoseActivity">

<intent-filter >

<action android:name="qyj.rose.activity"/> 名字随便起

<category android:name="android.intent.category.DEFAULT"/> 默认必须有 <data android:scheme="http"/> data数据中的Uri前缀

</intent-filter>

</activity>

13.Activity配置详解如下(不全 需要的看官网或自己加)

自己总结的android面试题

说明:一般情况下,launch中重新启动这个任务都会清楚底部以上的activity这个可以保留 Sample(例子):某人从主页屏幕载入activityP,并从哪里到达activityQ。用户接下来按HOME键,然后返回到activityQ。因为那时他在P的task里操作的地方。然后,如果P将该标志设置为true,当用户按了HOME键,该task进到后台去的时候,其上的所有的activity(Q也属于这种情况)讲被移除。所以以后回到该task时看到的只有P。

自己总结的android面试题

说明:当用户再次载入该task时(在主页屏幕上选择该task),一个既存的activity实例是否应该被关闭---------ture表示会被关闭 false表示不会 。默认值为false。

自己总结的android面试题

说明:ture允许次activity给其他进程调用 false 不允许其他进程调用次activity 默认为false

自己总结的android面试题

说明:如果他的值为“:string”形式 根据需要给他一个新的进程 如果他的值为“string” 修改进程别名

自己总结的android面试题

说明:是否保存activity的状态(也就是上面的值啦)如果为false就保存 为true就不保存。默认为false。

自己总结的android面试题

自己总结的android面试题

说明:横竖屏切换----“unspecified”不指定切换方式---是默认值 “sensor”通过感应器来控制切换

自己总结的android面试题

说明:activity执行的四种模式------根据任务栈的相关只是来看这个属性

singleTop:当它在栈顶的时候就不会再去实例化它了(mp3播放界面适合这种) 会调用的他的onNewIntent()生命周期方法。

singleTask:当他在当前栈里面已经实例化了的时候,再次调用它的时候它会关闭(destroy掉它上面的所有activity)然后调用它的onNewIntent()生命周期方法。------最后它跑到栈顶了。

singleInstance:独立成栈(开辟了一个新栈) 并且有且只有它自己一个实例。

退栈原则:先退当前栈,当前栈里面的activity退完了,再退接下来的栈

一个A 一个B 自己写个例子练习一下。

说明:当用户离开并且它不再显示在屏幕上时,activity是否会应该被从activity stack里移除并且结束掉(调用他的finish()方法)----------true表示应该结束 false 表示不结束。默认值为false。

自己总结的android面试题

说明:launch打开历史里面是否包含他 -------------true不包含 false包含 默认值为false

Broadcast相关部分如下:

1.说说Android中发送的两种广播分别是?以及他们的区别?

常规消息通过Content.sendBrodcast()发送 (随机接收)

排序消息通过Content.sendOrderedBroadcast()发送(按序接收)

2.编写BroadcastReceiver时候的注意事项(自己觉得需要记住的就记一下吧)?

1.可以在AndroidMainfest.xml中定义各个接收器的级别<intent-filter android:priority="1">

2.也可以调用abortBroadcast()终止广播,本广播接收后不再向下广播

3.BroadcastReceiver作用以及为何要引入

1.系统执行状态

2.自定义执行状态,发消息提示更行界面

4.BroadcastReceiver如何使用

1.继承BroadcastReceiver类

2.重载 onReceiver()方法

3.配置AndroidManfest.xml中的<receiver>以及<users-permission>

5.系统启动的时候启动服务如何实现

通过BroadcastReceiver获得系统启动的消息 然后启动自己的服务或系统的服务

6.BroadcastReceiver接收到值宿主进程生命周期思考?

Receiver到message会启动宿主程序,当返回后,如果没有其它交互,宿主程序状态会为empty。因此如果要长期运行宿主程序,就startService

7.BroadcastReceiver接收处理的时候是子线程吗?(线程关系类似于Handler也是在主线程)

不是但发送的时候是异步的。 Receiver的时候 如果处理时间大于10S 请异步执行避免 ANR

8.系统消息自己去找来接收比如:收发短信、接打电话、等消息

9.BroadcastReceiver的机制是什么?(类似于ContentProvider机制)

程序安装的时候 就会把接收的程序放到链表中了 其他的应用程序分发的时候查找分发 队列hashtable中的intentfilter 进而找到BroadcastReceiver

Service相关部分如下:

1.什么是Service?

有些用时比较长的操作我们希望他在后台运行,不耽误当前的操作。这就引入和Service概念

2.请描述一下Service的生命周期

自己总结的android面试题

3.说一下Android里有哪两种Service

按启动方式:startedService和boundService

按服务性质:localService和RemoteService(自己总结)

按实现方法:javaservice和NativeService(自己总结)

4.Service会新开进程或者线程吗?

都不会

Service在后台运行,不与用户进行交互。 在默认情况下,Service运行在应用程序进程的主线程中,如果需要在Service中处理一些网络连接等耗时的操作,那么应该将这些任务

放在单独的线程中处理,避免阻塞用户界面。

5.StartedService和BoundService区别

同样是继承自Service 但是他们的生命周期调用的方法有点区别,还有启动和关闭的方法 也不一样

最本质的区别:boundService其实是一个客户端、服务器端的感念。借助于bind来通信

1.StartService和启动他的activity不同生共死、BoundService和启动他的activity同生共死 所以如果当前的进程关闭了, StartService也就销亡了。

2.无论是bind or start,只要service没有实例化,就都被create。但startService每次都会调用onStartCommand。bind 则如果被

绑定,就不再调用onBind()了.。

6.掌握Service和线程的之间选择?

官方的:1.Service是一个很方便的组件让你运行后台程序,并且不影响当前操作

2.当你需要在你当前操作的时候另外起一个更独立操作时候可以考虑线程, 比如当期程序不关闭的情况下运行音乐。

自己总结:1.从逻辑上你认为需要一个后台操作,但跟我们现在主线程操作通信频繁, 逻辑关系紧密,就用多线程(直接用)

2.能够从逻辑上区分开来并且要长期在后台运行就用服务。

7.Service与IntentService区别?

Service是所有服务的基类,我们要实现服务就需要继承这个类

IntentService是Service子类,异步处理服务,新开了一个线程:HandlerThread在线程中发 消息,然后接收处理完成后,会清除线程,并且关掉服务。 多了一个方法OnHandleIntent() IntentService 适用场合:适合执行一次性操作的比如下载??

8.创建和试用Service步骤(startService)

1.继承Service类实现自己的服务

2.在androidMainfest中注册服务

3.启动服务startService() 停止服务stopService() ---------在activity中调用

4.stopSelf() ---------------在Service中调用(前提要执行完onStartConment()方法)

9.创建和使用Service步骤(bindService)

1.继承Service类实现自己的服务

2.在androidMainfest中注册服务

3.创建ServiceConnection连接对象

3.启动服务bindService(intent,serviceConnection,flag) 停止服务unbindService(serviceConnection) ---------在activity中调用

10.BindService和ServiceConnection中的方法的执行先后顺序?

1.onBind()和onServiceConnected()谁先执行 ? (onBind先执行)

2.onUnbind()和onServiceDisconnected()谁先执行? (onServiceDisconnected先执行)

11.如何是后台服务变成在前端运行---不容易被系统干掉?

在onStartCommand方法中调用startForeground(id, notification)方法

12.一定要理解清楚binder机制的作用?

IPC进程通信

13.管理一个绑定服务生命周期图解

自己总结的android面试题

线程相关部分如下:

1.请解释一下在单线程模型中Message、Handle、MessageQueue、Looper之间的关系?

其他相关的: 1.JSON Vs XML ?

1.JSON和XML的数据可读性基本相同

2.JSON和XML同样拥有丰富的解析手段

3.JSON相对于XML来讲,数据的体积小

4.JSON与JavaScript的交互更加方便

5.JSON对数据的描述性比XML较差

6.JSON的速度要远远快于XML

2. 4.1新增加的功能和特性

3.全面的网络操作 4.Android提供了5种方式存储数据 ?

? 使用SharedPreferences存储数据;

? 文件存储数据;

? SQLite数据库存储数据;

? 使用ContentProvider存储数据;

? 网络存储数据;

5.动画的两种模式

一种是tweened animation(渐变动画)

XML中JavaCodealphaAlphaAnimationscaleScaleAnimation

一种frame by frame(画面转换动画)

XMLJavaCodetranslateTranslateAnimationrotateRotateAnimation

UI相关部分如下:

1.什么是style和Theme?两者之间的区别?

Theme是针对窗体级别的,改变窗体样式

Style是针对窗体元素级别控件的,改变指定控件或者Layout样式

2.如何使用style?

1.创建style

A在res\values\下创建style.xml

B.添加<resources>节点(根节点)

C添加自定义的style及其属性

2.为控件指定style(style="styleName")

3.如何使用theme?

1.创建跟创建style一样使用地方不一样

2.使用方法

A在androidMainFest.xml文件中,为Activity指定theme属性(android:theme=“style”) B在Activity创建时调用setTheme函数

3.系统自带的Theme、定义自己的Theme

4.在不重启Activity、不切换布局文件的情况下 ,如何给activity换肤

两个Activity来回调用本身然后关闭掉前一个

5.在数据量很大时,如何提高ListView的响应速度?

1.重用已经生成的Item View

2.添加ViewHolder避免重复查找需要修改的控件

3.缓存Item数据

4.分段显示

6.阐述自定义控件的一般步骤?

7.分别描述如何让Activity以及控件使用动画?

8.UI响应速度慢,以及解决的方式?

1.减少主线程的阻塞时间(试用多线程)

2.提高 listView的效率

3.优化文件布局

4.优化Activity的背景图片

5.使用ViewsStub

9.ViewStub介绍

相关推荐