安卓基础面试一

         1,安卓的体系架构
(1)底层是Linux系统内核层,安卓是基于linux2.6版本开发的,包含各种应用驱动:DisplayDriver,CameraDriver,
Flash Memory Driver,Binder(IPC)Driver,Keypad Driver,Wifi Driver,Dudio Driver,Power Management
(2)第三层是各自类库和安卓运行环境
类库:SurfaceManager ,Media Framework,SQLite,OpenGL  |  ES, FreeType,WebKit, SGL,SSL,libc。
安卓运行环境:Core Libraries,Dalvik Virtual Machine
(3)第二层应用程序框架层
Activity Manager,Window Manager, Content  Provider, View System,Package Manager,Telephony Manager,Rescoure  Manager,Location Manager,Notification  Manager
(4)第一层是应用程序层
Home,Contacts,Phone,Browser等等
      2,jvm和dvm的区别(安卓虚拟机和java虚拟机)
(1)DVM 基于寄存器,JVM基于栈,基于寄存器的编译花费的时间更短
(2)Dalvik程序只包含一个.dex,JVM则为多个.class;

(3)Dalvik允许多个实例,每一个实例作为一个独立的linux进程执行,可以防止一个程序的崩溃导致所有程序都崩溃;

(4)性能:完成同样的事情,基于栈的虚拟机需要更多的指令,意味着更多的指令分派和 内存访问次数,这是 JVM 的执行性能不如 Dalvik VM 的原因之一。
3,点击事件的四种方式
(1)内部类
private class MyListener implements OnClickListener
(2)匿名内部类
bt.OnClickListener(new OnClickListener());
(3)让activity直接实现OnClickListener接口(适合用于多个按钮的点击事件)
public class MainActivity extends Activity implements OnClickListener
(4)直接在布局xml文件中指定点击事件的方法名
OnClick:="show"
public void show(View view)
4,四大组件,五大布局
四大组件:Activity  活动  Service  服务 BroadcastReciver 广播接收者   Content Provider 内容提供者
五大布局:线性布局(LinearLayout)   相对布局 (RelativeLayout) 帧布局 (FrameLayout) 表格布局(TableLayout)
 绝对布局 (AbsoluteLayout)已过时,因为他精确到一个点,在不同屏幕上显示的位置不同,适配的屏幕不同布局不同,不能适用于所有手机
5,根据是否知道应用程序的源代码
* 黑盒测试 不知道程序的源代码,但是知道程序的功能,根据输入测试输出
* 白盒测试 知道程序的源代码,写一写测试逻辑跑这个程序的代码
6,Activity的生命周期
activity的生命周期:
 onCreate()  onStart()  onReaume()  onPause()   onStop()   onDestroy()  onRestart()

第一个完整的生命周期:
当Activity一启动时调用的方法有:
onCreate()  onStart()  onReaume()
当点击返回按钮时执行的方法有:
onPause()   onStop()   onDestroy()
再点击应用的时调用的方法有:
onCreate()  onStart()  onReaume()

第二个完整的生命周期:
当Activity一启动时调用的方法有:
onCreate()  onStart()  onReaume()
当点击home键时执行的方法有:
onPause()   onStop()   
再点击应用的时候执行的方法有:
 onRestart()  onStart()  onReaume()

第三个完整的生命周期:
当Activity一启动时调用的方法有:
onCreate()  onStart()  onReaume()
当跳转到另一个activity时执行的方法有:
onPause()   onStop()  
当点击返回按钮时执行的方法有:
onRestart()  onStart()  onReaume()
    
第四个完整的生命周期:
当你要跳转的activity 的样式是theme.Dialog主题形式时:
只执行:onPause()方法activity处于暂停状态
 当你弹出对话框的时候,就不会执行生命周期,他属于activity的一部分
7,注册广播的方式
(1)常驻型广播:是在清单文件的application里面定义receiver并设置要接收的action
静态注册方式的特点:不管该应用程序是否处于活跃状态,都会进行监听。
Intent intent = new Intent();
intent.setAction("MyReceiver_Action");
context.sendBroadcoast();

 <receiver android:name="MyReceiver" >
  <intent-filter>
                <action android:name="MyReceiver_Action" />
            </intent-filter>
</receive>
(2)非常驻型广播:
动态注册方式在activity里面调用函数来注册,和静态的内容差不多。
动态注册方式特点:在代码中进行注册后,当应用程序关闭后,就不再进行监听。
MyReceiver receiver=new MyReceiver();
IntentFilter filter=new IntentFilter("MyReceiver_Action");
registerReceiver(receiver,filter);//注册广播接收器
8,Handler机制
子线程中不能修改UI,修改UI的操作都是在主线程中完成,安卓中避免anr的出现,就出现了一个Hanlder机制,把一些耗时的操作放到子线程中,解决了主线程中有大量的耗时操作和anr的问题,Handler机制是网络请求等一些耗时操作通过handler对象把msg。obj对象携带的数据发送给消息队列,消息队列再与Looper对象进行沟通looper对象把消息发送给主线程,主线程对UI进行操作
9,Aidl是什么,它的作用是什么
Aidl是安卓接口定义语言的意思。作用是让两个应用之间进行跨界通讯
10,Xml解析有几种方式    
sax pull dom 三种
11,数据存储方式(5种)
(1)网络存储数据
(2)使用sharedPreferences存储数据
(3)文件存储数据
(4)SQLite数据库存储数据
(5)使用ContentProvider存储数据
12,OOM异常是什么?原因是什么?
out of memory 内存泄漏
原因:一,加载对象过大
二,相应资源过多,没有来得及释放
13,get和post的区别
(1)get是从服务器上获取数据,post是向服务器传送数据
(2)get的安全性非常低,post的安全性较高,但get的执行效率却比post好
(3)get传送的数据量较小,post传送的数据量较大
(4)get方式:服务器端用Request.QueryString获取变量的值。post方式,服务器端用Request.Form获取提交的数据
(5)get是把参数数据队列加到提交表单的action属性所指的URL中,值和表单的各个字段一一对应,在URL中可以看到
post是通过HTTP post机制,将表单内各个字段与其内容放置在HTMLHEADER内一起传送到action属性所指的URL地址,用户看不到这个过程。
14,listview怎么优化?
复用convertView对vew进行优化和viewHolder对控件进行复用
15,权重是什么?作用是什么?
权重是在线性布局中的一个属性layout_weight,与Layout_height="0dp"一起使用,作用是剩余空间分配
16,创建数据库的步骤
(1)拿到数据库的帮助类对象,并在构造函数中给数据库起一个名字
(2)重写帮助类的onCreate()和onUpdate()方法
(3)在onCreate()方法中执行sql语句,插入字段的SQL语句,并给数据库创建一个表
(4)在onUpdate()方法中执行sql语句,但是这个语句是修改字段的更新数据库的语句
(5)在Activity中调用继承了数据库帮助类的对象
(6)通过帮助类获取到数据库这个文件
17,Activity的四种启动模式
(1)Standard标准模式  每次启动一个Acitivity都会创建一个Activity对象,不管这个Activity是否存在
(2)SingleTop单一顶部模式,想要启动哪个activity就把它创建中栈顶,如果在栈顶直接复用
(3)SingleTask单一任务栈,想要调用哪个activity就把与他在同一个栈内的其他activity都移除掉,并且移到栈顶,如果不存在直接在栈顶创建
(4)SingleInstance单例模式,想要调用activity时就把这个activity移动到一个新栈中,就不会再重新创建这个对象了,以后可以直接调用,当移动到新栈后,原栈的activity就会消失
18,数据库增删改查的方法
(1)通过SQL语句实现
(2)通过安卓中封装好的方法
19,显式意图和隐式意图
显示意图:明确指定组件名的Intent。
在应用程序的java代码中
Intent intent = new Intent();  
intent.setAction(Activity1.this,Activity2.class);   
startActivity(intent);   
隐式意图:没有明确指定组件名的Intent
必须要设置action才能启动意图
而且java代码中的action等数据要与清单文件中的配置信息保持一致
20,dp和px的区别
dp是设备独立像素,屏幕宽高和像素的比值
px是像素,也就是真实屏幕的大小
21,Fragment的生命周期
onCreate()  onCreateView()  onStart()  onResume()  onPause()  onStop()   onDestroyView()  onDestroy()
22,两个Activity怎么传参
利用intent对象携带数据,startActivityForResult()方法并且重写onActivityResult()方法
23,R文件丢失了怎么办?
第一种情况:先找出错误来,有可能是包名或图片的名称不符合要求,修改过来保存就好了
第二种情况:(1)从别的工程里拷贝一份R文件过来,随意改动xml里的一个控件,选中项目,点击Project———>clean
清理一下项目。
(2)选中项目,右键选择Android Tools---->Fix Project Properties
(3)选中项目,右键Properties——》Android,选择相应的版本,点击OK
24,检验内存卡是否被挂载?
挂载就是你的手机可以访问sd卡了
判断外部存储的状态是否等于媒体安装好的
Enviroment.getExternalStorageState().equals(Enviroment.MEDIA_MOUNTED)
25,网络请求 的方式
get post httpClient 异步httpClient
26,动画
逐帧动画和属性动画和补间动画
补间动画包括旋转,缩放,透明度,平移的效果(rotateAnimation,ScaleAnimation,alphaAnimation,TranslateAnimation)
属性动画:ObjectAnimator


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值