Android初级
1、 谈谈Android系统架构?
答:分为四层:
1)应用程序层 2)应用程序框架层 3)系统运行库层 4)Linux内核层
2、 列举几个你常用的ADB命令?
答: 常用的命令有:adb shell,adb pull,adb push,adb devices,adb install
3、 列举Activity的生命周期的7个方法?
答:Activity生命周期 :是指Android中Activity的启动到停止的全过程。
Android的生命周期由Android系统进行调度和控制。
Activity完整生命周期有7个方法,分别是onCreate() , ,onStart(),onResume(),onPause(),onStop(),onRestart(),onDestroy().
4、 Activity生命周期的四种状态?
答:
1、Running(运行态)
位于屏幕最前端时,此时处于可见状态,和用户可交互的状态。
2、Paused(暂停态)
当Acitivy被另一个透明的或者非全屏的Activity覆盖时的状态叫Paused状态,虽然可见但不可交互。(失去焦点状态)
3、Stop(停止态)
当Activity被另外一个Activity覆盖、界面不可见时处于Stop状态。
4、Killed(待用态)
Activity被系统杀死或者跟本没启动时就是Killed状态。
5、 简要叙述Android中的主要五种常用布局及其特点?
答:最常用的布局有以下这几种:
第一种:帧布局(框架布局)FrameLayout,在这个布局中,所有的子元素统统放于这块区域的左上角,并且后面的子元素直接覆盖在前面的子元素之上,将前面的子元素部分和全部遮挡。
第二种:线性布局LinearLayout,最常用的一种布局方式,所有子控件的对齐方式,取决于如何定义 orientation的属性:vertical 垂直方向 ,如果按照这种方向所有的子控件将按照垂直的方式分布在布局上,每行只允许有一个子元素,horizontal水平方向 ,这时子控件将会以水平的方向分布在布局中。
第三种:绝对布局AbsoluteLayout,又可以叫做坐标布局,可以直接指定子元素的绝对位置,这种布局简单直接,直观性强,但是由于手机屏幕尺寸差别比较大,使用绝对定位的适应性会比较差。
第四种:相对布局RelativeLayout,允许子元素指定它们相对于其父元素或兄弟元素的位置,这是实际布局中最常用的布局方式之一。它灵活性大很多,当然属性也多,操作难度也大,属性之间产生冲突的的可能性也大,使用相对布局时要多做些测试。
第五种:表格布局TableLayout,表格布局TableLayout以行列的形式管理子元素,每一行是一个TableRow布局对象,当然也可以是普通的View对象,TableRow里每放一个元素就是一列,总列数由列数最多的那一行决定。
6、 简述ImageView,ImageButton以及Button的区别?
答:ImageView和ImageButton都是继承于View类,Button是继承于TextView类。所以
ImageButton 不支持setText(),而Button支持
ImageButton 支持setImageURI,而Button不支持
ImageButton和Button 都有Button的状态而ImageView没有。
7、 Android中常用的菜单的分类?以及他们的特点?
答:Android中菜单主要分为三类:选项菜单(Option Menu),上下文菜单(Context Menu),子菜单(Sub Menu).
选项菜单是点击Menu按钮弹出来的菜单,最多显示6个。
上下文菜单是在某些组件上添加,长按动作发生后弹出上下文菜单。
子菜单可以创建在选项菜单和上下文菜单上。子菜单里不可以再有子菜单。
8、 谈谈对Intent的理解?
答:实现页面(Activity)跳转,作为四大组件中起“枢纽”作用的对象
Intent中文意思“意图”,在四大组件中,服务和广播接收是通过Intents(消息,意图)来激活的。
Intent分为两种:显式Intent和隐式Intent区别
9、 显式Intent和隐式Intent区别?
答:Intent是一种在不同组件之间传递的请求消息,是应用程序发 出的请求和意图。
对于明确指出了目标组件名称的Intent,我们称之为显式Intent。
对于没有明确指出目标组件名称的Intent,则称之为隐式Intent。
Android系统使用IntentFilter 来寻找与隐式Intent相关的对象。
显式Intent直接用组件的名称定义目标组件,这种方式很直接。但是由于开发人员往往并不清楚别的应用程序的组件名称,因此,显式Intent更多用于在应用程序内部传递消息。比如在某应用程序内,一个Activity启动一个Service。
隐式Intent恰恰相反,它不会用组件名称定义需要激活的目标组件,它更广泛地用于在不同应用程序之间传递消息
10、 谈谈Service的生命周期?
答:Service的生命周期由使用Service两种方式决定,启动方式不同生命周期不同。
Start方式启动Service的生命周期:
onCreate()—onStartCommond()—onDestroy()
调用者和服务之间没有任何的联系,即使调用者退出,那么服务也仍然进行。
Bind方式启动Service的生命周期:onCreate()->onBind()->-->onUnbind() -> onDestroy()
调用者和服务绑定在一起,调用者退出,服务即便退出。
11、 谈谈对Service的理解?
答:服务是一个应用程序组件,可以在后台执行长时间运行的操作,不提供用户界面。
一项服务“开始”,当一个应用程序组件(如一个活动)开始通过调用的StartService()
“绑定”一个服务,当一个应用程序组件绑定它通过调用bindService()
12、 启动服务有几种方式?他们之间的区别是什么?
答:启动服务有两种方式。
一种是通过context.startService() 来启动Service
其生命周期为context.startService () ->onCreate()- >onStart()->Service running-->context.stopService()->onDestroy() ->Service stop
调用者和服务之间没有任何的联系,即使调用者退出,那么服务也仍然进行。
另外一种是通过使用bindService()启动Service
其生命周期为:context.bindService()->onCreate()->onBind()->Service running-->onUnbind() -> onDestroy() ->Service stop
调用者和服务绑定在一起,调用者退出,服务即便退出。
13、 AIDL全称是什么?谈谈AIDL适用的场景?
答:AIDL全称:Android Interface Define Language安卓接口定义语言。
主要适用于跨应用的服务的访问和调用。
14、 建立AIDL服务的步骤
建立AIDL服务要比建立普通的服务复杂一些,具体步骤如下:
(1)在Eclipse Android工程的Java包目录中建立一个扩展名为aidl的文件。该文件的语法类似于Java代码,但会稍有不同。
(2)如果aidl文件的内容是正确的,ADT会自动生成一个Java接口文件(*.java)。
(3)建立一个服务类(Service的子类)。
(4)实现由aidl文件生成的Java接口。
(5)在AndroidManifest.xml文件中配置AIDL服务,尤其要注意的是,<action>标签中android:name的属性值就是客户端要引用该服务的ID,也就是Intent类的参数值。
15、 广播接收器的全称?广播接收器的作用?
答:广播的全称是:BroadcastReceiver 广播接收器。
BroadcastReceiver的作用:处理Android中发出的广播事件。
16、 有关广播的注册方式、优缺点,以及引用广播机制的用意。
答:注册广播共有两种方式,一种是通过在manifest.xml文件中注册,不需要手动进行注销。先在XML文件中添加广播注册,然后再在JAVA篇码段中添加Intent intent = new Intent("test");
sendBroadcast(intent);
另一种直接在代码中通过代码注册(有点类似如隐式Intent);需要通过手动进行注销(unregisterReceiver(receiver);
第一种方式: 不需要启动程序也可以监听广播但有时显得不灵活;
第二种方式:需要启动程序代码才可以监听,有时比较灵活,如当希望在某个Activity启动时监听广播,当这Activity死亡时不监听,即可用这种方法。
BroadcastReceiver的用意:处理Android中发出的广播事件。
17、 Android四大组件的作用?android用四大组件的用意何在?(ContentProvider可以不用描述)
答:Android中四大核心组件分别是:Activity,Service,BroadCastReceiver,ContentProvider。
Activity 是UI界面显示,它是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各界面的状态,做很多持久化的事情,妥善管理生命周期以及一些跳转逻辑。
Service(后台运行的服务)一种长生命周期的、可以理解为没有界面的activity,
后台服务于Activity,封装有一个完整的功能逻辑实现,接受上层指令,完成相关的事务,定义好需要接受的Intent提供同步和异步的接口。
BroadcastReceiver 广播接收器(做广播,通知时候用到)是为了处理Android中发出的广播事件的组件;
(接受一种或者多种Intent作触发事件,接受相关消息,做一些简单处理,转换成一条Notification,统一了Android的事件广播模型。)
Content Provider 数据通信(组件之间通信)实现不同组件之间数据的共享
(是Android提供的第三方应用数据的访问方案,可以派生Content Provider类,对外提供数据,可以像数据库一样进行选择排序,屏蔽内部数据的存储细节,向外提供统一的接口模型,大大简化上层应用,对数据的整合提供了更方便的途径。 )
19、谈谈Activity与Service的区别
a. Activity
Activity是用户和应用程序交互的窗口,一个Activity是一个应用程序组
件,提供一个屏幕,用户可以用来交互为了完成某项任务例如拨号、拍照、
发送email、看地图。每一个activity被给予一个窗口,在上面可以绘制用
户接口。窗口通常充满屏幕,但也可以小于屏幕而浮于其它窗口之上。一个
activity相当于我们实际中的一个网页,当打开一个屏幕时,之前的那一个
屏幕会被置为暂停状态,并且压入历史堆栈中,用户可以通过回退操作返回
到以前打开过的屏幕。activity的生命周期:即“产生、运行、
销毁”,但是这其中会调用许多方法onCreate(创建) 、onStart(激活) 、
onResume(恢复) 、onPause(暂停) 、onStop(停止) 、onDestroy(销毁) 、
onRestart(重启)。
b.Service
Service是运行在后台的一段代码,它可以运行很长的时间,相当于后台的一个服务。它可以运行在它自己的进程,也可以运行在其他应用程序进程的上下文(context)里面,这取决于自身的需要。其它的组件可以绑定到一个服务(Service)上面,通过远程过程调用(RPC)来调用这个方法。例如媒体播放器的服务,当用户退出媒体选择用户界面,仍然希望音乐依然可以继续播放,这时就是由服务 (service)来保证当用户界面关闭时音乐继续播放的。
20、 Intent 能传递什么数据类型?
a.简单或者基本数据类型
b.传递一个Bundle
c.传递Serializable对象
d.Parcelable对象
e.Intent
21、当一个Activity在虚拟器上运行起来以后,点击home键,Activity会执行什么生命
还走起方法? 当再次进入这个应用,Activity执行什么生命周期方法?
点击home键,会执行onPouse()----onStop() 当再次打开应用,会执行
onRestart()---onStart()----onResume()
22、SharedPreferences能存储什么数据类型?
Shared Preferences:用来存储"key-value"paires格式的数据,它是一个
轻量级的键值存储机制,只可以存储基本的数据类型。如 String 、int 、
boolean 、float 、double、long 、byte、short
23、一个Intent对象包括六个属性,请一一列举这六个属性。
答案:组件名(Component Name)、动作(Action)、数据(Data)、分类(Category)、额外信息(Extra)和标志(Flags)。
24、请写出ListView的特点。
答案:①采用MVC模式将前端显示和后端数据分离。②该控件不能使用ListView.add或类似方法添加数据,需要指定一个Adapter对象,通过Adapter对象获得需要显示的数据,这个Adapter需要实现ListAdapter接口。③为ListView提供数据的List或数组相当于MVC模式中的M(数据模型Model)。④ListView相当于MVC模式中的V(视图View)。⑤Adapter对象相当于MVC模式中的C(控制器Control)。
25、请写出ArrayAdapter、SimpleAdapter、SimpleCursorAdapter和自定义的Adapter各自的特点。
答案:①ArrayAdapter:最简单的Adapter,适合于列表项中只含有文本信息的情况,是填充文本列表最简便的一种方式。②SimpleAdapter:比ArrayAdapter复杂,适合于每一个列表项中含有不同的子控件,比如一个图片、一串文本和一个按钮的组合。③SimpleCursorAdapter:专门用来把一个Cursor(游标)中的数据映射到列表中,Cursor中的每一条数据映射为列表中的一项。Cursor常用在数据库查询中,会把查询到的若干条记录放在一个Cursor中。④自定义Adapter:完全自行定义数据的适配方式,灵活性最强,但使用起来比前三个复杂。适合于当前三个Adapter不能满足需求的情况下。
26、请简单介绍一下ListView的缓存机制。
答案:①如果有几千、几万甚至更多的项时,其中只有可见的项存在于内存中,其它的都在Recycler中,Recycler是Android中专门用来处理缓存的组件。②ListView先通过getView()方法请求一个View,然后请求其它可见的View。convertView在getView中是空的(null)。③当列表第一项滚出屏幕,并且一个新的项从屏幕低端上来时,ListView会再请求一个View,这时,convertView已经不是空值了,它的值是滚出屏幕的第一项,之后只需设定新的数据,然后返回convertView即可,而不必重新创建一个View。
27、请写出Android中的不少于四个Adapter控件。
答案:ListView、Gallery、Spinners、自定义Adapter控件和GridView等。
28、请写出Android中的不少于四种Adapter对象。
答案:ArrayAdapter、SimpleAdapter、自定义Adapter和SimpleCursorAdapter
29、请详细请描述一下在Activity的生命周期中各个方法的调用顺序。
答案:① 初次启动一个Activity时的执行过程是:依次执行了onCreate() 、onStart() 和onResume()方法。② 当Activity启动后,点击“返回”按钮,这时Activity的执行顺序是:onPause() -> onStop() -> onDestroy()。③ 启动一个Activity时的执行过程是:依次执行了onCreate() 、onStart() 和onResume()方法。④ 在Activity被启动之后,点击Home按钮,这时Activity的执行顺序是:onPause() -> onStop()。⑤ 点击Home按钮后,系统回到桌面,然后我们再找到这个应用并打开,这时Activity的执行顺序是:onRestart() -> onStart() -> onResume()。⑥ 重新启动一个应用,在它被启动后,先点击“拨打电话”按钮,之后再点击“返回”按钮,这时Activity的执行顺序是:onPause() -> onStop() -> onRestart() -> onStart() -> onResume()。
30、请描述Android中的几种数据存储方式。
答案:
SharedPreferences
File (IS.ES)
SQLite数据库
网络存储
Content Provider