2017春 Android面试总结
2017-03-20 21:48
260 查看
几套Android面试题和答案
http://www.cnblogs.com/zady/p/3380888.html http://blog.csdn.net/zoe_sj/article/details/53366437 http://www.myexception.cn/android/1979113.html http://www.bkjia.com/Androidjc/1042951.html http://www.docin.com/p-603761472.html
一,选择题
0.在多个应用中读取共享存储数据时,需要用到的query方法,是哪个对象的方法(A)
A. ContentResolver
B. ContentProvider
C.CursorD
D.SQLiteHelper
答:ContentProvider负责 组织应用程序的数据; 向其他应用程序提供数据;
ContentResolver则负责 获取ContentProvider提供的数据; 修改/添加/删除更新数据等
32、以下关于Service的说法错误的是(c )
A. Android中,Service有两种不同的使用方式:一种是以启动方式使用Service
(Started Service),另一种是以绑定方式使用Service(Bound Service)。
B. 需要在AndroidManifest.xml文件中注册,否则,Service根本无法启动。
C. 以绑定方式使用Service,能够获取到Service对象,不仅能够正常启动Service,而且
能够调用正在运行中的Service实现的私有方法和属性。
D. 为了使Service支持绑定,需要在Service类中重写onBind()方法,并在onBind()方法
中返回Service对象。
1.下列哪些语句关于内存回收的说明是正确的? (B)
A 程序员必须创建一个线程来释放内存;
B 内存回收程序负责释放无用内存
C 内存回收程序允许程序员直接释放内存
D 内存回收程序可以在指定的时间释放内存对象
B是对的。 A. 程序员不需要创建线程来释放内存。 C. 也不允许程序员直接释放内
存。 D. 不一定在什么时刻执行垃圾回收。
2.下面异常属于Runtime Exception 的是(ABCD)
A.ArithmeticException
B.IllegalArgumentException
C.NullPointerException
D.BufferUnderflowException
异常分两种:
1):编译时被检查的异常,只要是Exception及其子类都是编译时被检测的异常。
2):运行时异常,其中Exception有一个特殊的子类RuntimeException,以及
RuntimeException的子类是运行异常,也就说这个异常是编译时不被检查的异常。
编译时被检查的异常和运行时异常的区别:
编译被检查的异常在函数内被抛出,函数必须要声明,否编译失败。
声明的原因:是需要调用者对该异常进行处理。
运行时异常如果在函数内被抛出,在函数上不需要声明。
不声明的原因:不需要调用者处理,运行时异常发生,已经无法再让程序继续运行,所
以,不让调用处理的,直接让程序停止,由调用者对代码进行修正。
3.Math.round(11.5)等於多少? Math.round(-11.5)等於多少?(C)
A.11,-11 B.11,-12
C.12,-11 D.12,-12
Math类中提供了三个与取整有关的方法:ceil 向上取整、 floor向下取整、 round四
舍五入.最难掌握的是round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即
将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果为12,Math.round
(-11.5)的结果为-11。
4.下列程序段的输出结果是(B)
void complicatedexpression_r(){
int x=20, y=30;
boolean b;
b=x>50&&y>60||x>50&&y<-60||x<-50&&y>60||x<-50&&y<-60;
System.out.println(b);
}
A、true B、false C、1 D、0
运算符的优先级依次是><, &&, ||
5.对一些资源以及状态的操作保存 ,最好是保存在
生命周期的哪个函数中进行(A)
A.onPause() B.onCreate() C.onResume() D.onStart()
6.我们都知道Handler是线程与Activity通信的桥梁,如果线程处理不当,你的机器就会
变得越慢,那么线程销毁的方法是(A)
A.onDetroy() B.onCreate() C.onFinish() D.onStop()
正确销毁线程的方法是:mHandler.removeCallbacks(mBackgroundRunnable); 这样就
可以避免在多次进入同一个Activity时创建多个同时运行着的线程。
7.为满足线程间通信,Android提供了(A)
A.Handler和Looper B.Handler
C.Message Queue D.Looper
8.下列对android NDK 的理解正确的是(ABCD)
A.NDK 是一系列工具的集合。
B.NDK 提供了一份稳定、功能有限的API头文件声明。
C.使“Java+C”的开发方式终于转正,成为官方支持的开发方式。
D.NDK 将是Android 平台支持C开发的开端。
9.下面在AndroidManifest.xml文件中注册BroadcastReceiver方式正确的是(A)
A、<receiver android:name="NewBroad" >
<intent-filter>
<action android:name="android.provider.action.NewBroad" />
</intent-filter>
</receiver>
B、 <
c947
;receiver android:name="NewBroad" >
<intent-filter>
action android:name="android.provider.action.NewBroad" />
</intent-filter>
</receiver>
C、<receiver android:name="NewBroad" >
<intent-filter>
<action android:name="android.provider.action.NewBroad" /><action>
</intent-filter>
</receiver>
D、 <intent-filter>
<receiver android:name="NewBroad" >
<action> android:name="android.provider.action.NewBroad"/>
<action>
</receiver>
</intent-filter>
10.Intent传递数据时,下列的数据类型哪些可以被传递(ABCD)(多选)
A、Serializable B、charsequence C、Parcelable D、Bundle
通过查询Intent/Bundle的API文档,我们可以获知,Intent/Bundle支持传递基本类型
的数据和基本类型的数组数据,以及String/CharSequence类型的数据和
String/CharSequence类型的数组数据。而对于其它类型的数据貌似无能为力,其实不然
,我们可以在Intent/Bundle的API中看到Intent/Bundle还可以传递Parcelable(包裹化
,邮包)和Serializable(序列化)类型的数据,以及它们的数组/列表数据。
二、简答题
1.内部类的作用
答:a.可以直接访问外部类的所有成员;b.简化代码增强程序的可读性;c.更好的定位
与接口关联的方法在代码中的位置;(参考
http://blog.sina.com.cn/s/blog_8fc52b02010114ml.html)
2.Hashcode的作用,与equal有什么区别?
equals()反映的是对象或变量具体的值,即两个对象里面包含的值--可能是对象的引用,
也可能是值类型的值。而hashCode()是对象或变量通过哈希算法计算出的哈希值。之所以
有hashCode方法,是因为在批量的对象比较中,hashCode要比equals来得快,很多集合都
用到了hashCode,比如HashTable。
两个obj,如果equals()相等,hashCode()一定相等。
两个obj,如果hashCode()相等,equals()不一定相等(Hash散列值有冲突的情况,虽然
概率很低)。
所以:
可以考虑在集合中,判断两个对象是否相等的规则是:
第一步,如果hashCode()相等,则查看第二步,否则不相等;
第二步,查看equals()是否相等,如果相等,则两obj相等,否则还是不相等。
为什么需要hashCode?
(1)通过hashCode可以很快的查到小内存块。
(2)通过hashCode比较比equal方法快,当get时先比较hashCode,如果hashCode不同,直
接返回false。
(参考 http://www.cnblogs.com/nktblog/articles/2518111.html)
3.页面上现有ProgressBar控件progressBar,请用书写线程以10秒的时间完成其进度显示
工作。
/**
* progressBar改变
*/
private void progressBarChange() {
//开启一个线程
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
//得到progeressBar的最大长度
int progressBarMax = progressBar.getMax();
try {
//progressBar当前的长度没有达到他的最长度,让循环一直进行
while (progressBarMax != progressBar.getProgress()) {
//拿到一个每次前进的进度值,因为是要10s完成,所以分为10
份
int stepProgress = progressBarMax / 10;
//progressBar当前的进度值
int currentProgress = progressBar.getProgress();
//让progressBar进度为每次前进最大值的十分之一
progressBar.setProgress(currentProgress +
stepProgress);
//前进一次,睡眠一秒
Thread.sleep(1000);
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
//开启线程
thread.start();
}
4.请描述下Activity的生命周期。
创建 onCreate - 启动onStart – 开始 onResume – 暂停 onPause – 结束 onStop
– 销毁onDestroy - 重启onRestart
(参考 http://blog.csdn.net/ramondlee/article/details/6840140)
5.如何将一个Activity设置成窗口的样式。
(参考 http://blog.163.com/zhou_411424/blog/static/197362156201231251637341/)
做法有两种(1).在AndroidManifest.xml文件当中设置当前activity的一个属性(系统自
带的属性):android:theme="@android:style/Theme.Dialog"(2)方法2.a.在你的
styles.xml文件中可以新建一如下的style:
<style name="Theme.FloatActivity" parent="android:style/Theme.Dialog">
</style>
b.在AndroidManifest.xml中在你需要显示为窗口的activity中添加如果属性:
android:theme="@style/Theme.FloatActivity" 即可
6.Activity、Window、View三者的差别,fragment的特点?
(参考 http://www.th7.cn/Program/Android/201610/982832.shtml)
(1)Activity像一个工匠(控制单元),Window像窗户(承载模型),View像窗花(显
示视图) LayoutInflater像剪刀,Xml配置像窗花图纸。Window是android中的窗口,表
示顶级窗口的意思,也就是主窗口,它有两个实现类,PhoneWindow和MidWindow,我们一
般的 activity对应的主要是PhoneWindow,在activity中经常使用的setContentView等方
法也是在这个里面实现的。
(2)fragment 特点:
Fragment可以作为Activity界面的一部分组成出现;
可以在一个Activity中同时出现多个Fragment,并且一个Fragment也可以在多个Activity
中使用;
在Activity运行过程中,可以添加、移除或者替换Fragment;
Fragment可以响应自己的输入事件,并且有自己的生命周期,它们的生命周期会受宿主
Activity的生命周期影响。
7.Android Service与Activity之间通信的几种方式
答:(参考 http://blog.csdn.net/xiaanming/article/details/9750689)
a.通过Binder对象 b.通过broadcast(广播)的形式
8.如何保证service在后台不被kill
(参考 http://blog.csdn.net/mad1989/article/details/22492519)
答:a、Service设置成START_STICKY(onStartCommand方法中),kill 后会被重启(等
待5秒左右),重传Intent,保持与重启前一样.b、通过 startForeground将进程设置为
前台进程,做前台服务,优先级和前台应用一个级别?,除非在系统内存非常缺,否则此
进程不会被 kill.c、双进程Service:让2个进程互相保护,其中一个Service被清理后,
另外没被清理的进程可以立即重启进程.d、AlarmManager不断启动service
9.Android中activity、service、broadcastReceiver的作用
应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监
听并处理用户的事件做出响应。
一个Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。
你的应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者
数据网络可用时)进行接收并做出响应。
Content Provider使一个应用程序的指定数据集提供给其他应用程序,实现多个应用程序
间共享数据。它的好处:统一数据访问方式。
10.什么情况导致内存泄漏,如何避免?
答:a.不使用setImageBitmap等方法设置一张大图,通过BitmapFactory.decodeStream方
法创建一个bitmap。b.对图片进行压缩。c.使用缓存。d.使用LruCache的ImageLoader。
e.借助第三方框架,picasso,xUtils中的bitmapUtils,volley等。
11.进程的优先级
答:按android系统优先杀死的顺序排列为:1.空进程;2.后台进程;3.服务进程;4.可见
进程;5.前台进程。一般来说,前台进程Android系统是不会杀死的,只有当前4个都杀掉
资源依旧不够才可能会发生。
12.传值和传引用的区别?
13.view的绘制过程
答: Android的View绘制是从根节点(Activity是DecorView)开始,他是一个自上而下
的过程。View的绘制经历三个过程:Measure、Layout、Draw。
14.Android中的“Application”,“Task”,“Activities”的关系
答:a.任何一个Android Application基本上是由一些Activities组成,当用户与应用程
序交互时其所包含的部分Activities具有紧密的逻辑关系,或者各自独立处理不同的响应
。这些Activities捆绑在一起成为了一个处理特定需求的Application, 并且以“.apk”
作为后缀名存在于文件系统中。
b.一个Task就是用户体验上的一个“应用”。它将相关的Activity组合在一起,以stack
的方式管理,这就是Task。在Android平台上可以将task简单的理解为幽多个Activity共
同协作完成某项应用,而不管Activity具体属于哪个Application,
15.String和StringBuffer的区别
答:string对象是不可变的,线程安全。StringBuilder与StringBuffer这两种对象都是
可变的。StringBuffer对方法加了同步锁,所以是线程安全的。StringBuilder并没有对
方法进行加同步锁,所以是非线程安全的。
16.AsyncTask的用法举例
答:class MyTask extends AsyncTask<String, Integer, String> {里面要重写四个方
法,一般在doInBackground()方法中执行具体的耗时任务,在OnProgressUpdate()中
进行更新UI操作,在onPreExecute()中进行界面的初始化,最后在onPostExecute()
方法中做收尾工作,比如关闭对话框pdialog.dismiss();
17.WebView如何获取网页中的标题、内容和图片
http://www.th7.cn/Program/Android/201608/935713.shtml
18.java object的wait和Thread的sleep方法区别
留给大家自己百度,欢迎交流。
http://www.cnblogs.com/zady/p/3380888.html http://blog.csdn.net/zoe_sj/article/details/53366437 http://www.myexception.cn/android/1979113.html http://www.bkjia.com/Androidjc/1042951.html http://www.docin.com/p-603761472.html
一,选择题
0.在多个应用中读取共享存储数据时,需要用到的query方法,是哪个对象的方法(A)
A. ContentResolver
B. ContentProvider
C.CursorD
D.SQLiteHelper
答:ContentProvider负责 组织应用程序的数据; 向其他应用程序提供数据;
ContentResolver则负责 获取ContentProvider提供的数据; 修改/添加/删除更新数据等
32、以下关于Service的说法错误的是(c )
A. Android中,Service有两种不同的使用方式:一种是以启动方式使用Service
(Started Service),另一种是以绑定方式使用Service(Bound Service)。
B. 需要在AndroidManifest.xml文件中注册,否则,Service根本无法启动。
C. 以绑定方式使用Service,能够获取到Service对象,不仅能够正常启动Service,而且
能够调用正在运行中的Service实现的私有方法和属性。
D. 为了使Service支持绑定,需要在Service类中重写onBind()方法,并在onBind()方法
中返回Service对象。
1.下列哪些语句关于内存回收的说明是正确的? (B)
A 程序员必须创建一个线程来释放内存;
B 内存回收程序负责释放无用内存
C 内存回收程序允许程序员直接释放内存
D 内存回收程序可以在指定的时间释放内存对象
B是对的。 A. 程序员不需要创建线程来释放内存。 C. 也不允许程序员直接释放内
存。 D. 不一定在什么时刻执行垃圾回收。
2.下面异常属于Runtime Exception 的是(ABCD)
A.ArithmeticException
B.IllegalArgumentException
C.NullPointerException
D.BufferUnderflowException
异常分两种:
1):编译时被检查的异常,只要是Exception及其子类都是编译时被检测的异常。
2):运行时异常,其中Exception有一个特殊的子类RuntimeException,以及
RuntimeException的子类是运行异常,也就说这个异常是编译时不被检查的异常。
编译时被检查的异常和运行时异常的区别:
编译被检查的异常在函数内被抛出,函数必须要声明,否编译失败。
声明的原因:是需要调用者对该异常进行处理。
运行时异常如果在函数内被抛出,在函数上不需要声明。
不声明的原因:不需要调用者处理,运行时异常发生,已经无法再让程序继续运行,所
以,不让调用处理的,直接让程序停止,由调用者对代码进行修正。
3.Math.round(11.5)等於多少? Math.round(-11.5)等於多少?(C)
A.11,-11 B.11,-12
C.12,-11 D.12,-12
Math类中提供了三个与取整有关的方法:ceil 向上取整、 floor向下取整、 round四
舍五入.最难掌握的是round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即
将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果为12,Math.round
(-11.5)的结果为-11。
4.下列程序段的输出结果是(B)
void complicatedexpression_r(){
int x=20, y=30;
boolean b;
b=x>50&&y>60||x>50&&y<-60||x<-50&&y>60||x<-50&&y<-60;
System.out.println(b);
}
A、true B、false C、1 D、0
运算符的优先级依次是><, &&, ||
5.对一些资源以及状态的操作保存 ,最好是保存在
生命周期的哪个函数中进行(A)
A.onPause() B.onCreate() C.onResume() D.onStart()
6.我们都知道Handler是线程与Activity通信的桥梁,如果线程处理不当,你的机器就会
变得越慢,那么线程销毁的方法是(A)
A.onDetroy() B.onCreate() C.onFinish() D.onStop()
正确销毁线程的方法是:mHandler.removeCallbacks(mBackgroundRunnable); 这样就
可以避免在多次进入同一个Activity时创建多个同时运行着的线程。
7.为满足线程间通信,Android提供了(A)
A.Handler和Looper B.Handler
C.Message Queue D.Looper
8.下列对android NDK 的理解正确的是(ABCD)
A.NDK 是一系列工具的集合。
B.NDK 提供了一份稳定、功能有限的API头文件声明。
C.使“Java+C”的开发方式终于转正,成为官方支持的开发方式。
D.NDK 将是Android 平台支持C开发的开端。
9.下面在AndroidManifest.xml文件中注册BroadcastReceiver方式正确的是(A)
A、<receiver android:name="NewBroad" >
<intent-filter>
<action android:name="android.provider.action.NewBroad" />
</intent-filter>
</receiver>
B、 <
c947
;receiver android:name="NewBroad" >
<intent-filter>
action android:name="android.provider.action.NewBroad" />
</intent-filter>
</receiver>
C、<receiver android:name="NewBroad" >
<intent-filter>
<action android:name="android.provider.action.NewBroad" /><action>
</intent-filter>
</receiver>
D、 <intent-filter>
<receiver android:name="NewBroad" >
<action> android:name="android.provider.action.NewBroad"/>
<action>
</receiver>
</intent-filter>
10.Intent传递数据时,下列的数据类型哪些可以被传递(ABCD)(多选)
A、Serializable B、charsequence C、Parcelable D、Bundle
通过查询Intent/Bundle的API文档,我们可以获知,Intent/Bundle支持传递基本类型
的数据和基本类型的数组数据,以及String/CharSequence类型的数据和
String/CharSequence类型的数组数据。而对于其它类型的数据貌似无能为力,其实不然
,我们可以在Intent/Bundle的API中看到Intent/Bundle还可以传递Parcelable(包裹化
,邮包)和Serializable(序列化)类型的数据,以及它们的数组/列表数据。
二、简答题
1.内部类的作用
答:a.可以直接访问外部类的所有成员;b.简化代码增强程序的可读性;c.更好的定位
与接口关联的方法在代码中的位置;(参考
http://blog.sina.com.cn/s/blog_8fc52b02010114ml.html)
2.Hashcode的作用,与equal有什么区别?
equals()反映的是对象或变量具体的值,即两个对象里面包含的值--可能是对象的引用,
也可能是值类型的值。而hashCode()是对象或变量通过哈希算法计算出的哈希值。之所以
有hashCode方法,是因为在批量的对象比较中,hashCode要比equals来得快,很多集合都
用到了hashCode,比如HashTable。
两个obj,如果equals()相等,hashCode()一定相等。
两个obj,如果hashCode()相等,equals()不一定相等(Hash散列值有冲突的情况,虽然
概率很低)。
所以:
可以考虑在集合中,判断两个对象是否相等的规则是:
第一步,如果hashCode()相等,则查看第二步,否则不相等;
第二步,查看equals()是否相等,如果相等,则两obj相等,否则还是不相等。
为什么需要hashCode?
(1)通过hashCode可以很快的查到小内存块。
(2)通过hashCode比较比equal方法快,当get时先比较hashCode,如果hashCode不同,直
接返回false。
(参考 http://www.cnblogs.com/nktblog/articles/2518111.html)
3.页面上现有ProgressBar控件progressBar,请用书写线程以10秒的时间完成其进度显示
工作。
/**
* progressBar改变
*/
private void progressBarChange() {
//开启一个线程
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
//得到progeressBar的最大长度
int progressBarMax = progressBar.getMax();
try {
//progressBar当前的长度没有达到他的最长度,让循环一直进行
while (progressBarMax != progressBar.getProgress()) {
//拿到一个每次前进的进度值,因为是要10s完成,所以分为10
份
int stepProgress = progressBarMax / 10;
//progressBar当前的进度值
int currentProgress = progressBar.getProgress();
//让progressBar进度为每次前进最大值的十分之一
progressBar.setProgress(currentProgress +
stepProgress);
//前进一次,睡眠一秒
Thread.sleep(1000);
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
//开启线程
thread.start();
}
4.请描述下Activity的生命周期。
创建 onCreate - 启动onStart – 开始 onResume – 暂停 onPause – 结束 onStop
– 销毁onDestroy - 重启onRestart
(参考 http://blog.csdn.net/ramondlee/article/details/6840140)
5.如何将一个Activity设置成窗口的样式。
(参考 http://blog.163.com/zhou_411424/blog/static/197362156201231251637341/)
做法有两种(1).在AndroidManifest.xml文件当中设置当前activity的一个属性(系统自
带的属性):android:theme="@android:style/Theme.Dialog"(2)方法2.a.在你的
styles.xml文件中可以新建一如下的style:
<style name="Theme.FloatActivity" parent="android:style/Theme.Dialog">
</style>
b.在AndroidManifest.xml中在你需要显示为窗口的activity中添加如果属性:
android:theme="@style/Theme.FloatActivity" 即可
6.Activity、Window、View三者的差别,fragment的特点?
(参考 http://www.th7.cn/Program/Android/201610/982832.shtml)
(1)Activity像一个工匠(控制单元),Window像窗户(承载模型),View像窗花(显
示视图) LayoutInflater像剪刀,Xml配置像窗花图纸。Window是android中的窗口,表
示顶级窗口的意思,也就是主窗口,它有两个实现类,PhoneWindow和MidWindow,我们一
般的 activity对应的主要是PhoneWindow,在activity中经常使用的setContentView等方
法也是在这个里面实现的。
(2)fragment 特点:
Fragment可以作为Activity界面的一部分组成出现;
可以在一个Activity中同时出现多个Fragment,并且一个Fragment也可以在多个Activity
中使用;
在Activity运行过程中,可以添加、移除或者替换Fragment;
Fragment可以响应自己的输入事件,并且有自己的生命周期,它们的生命周期会受宿主
Activity的生命周期影响。
7.Android Service与Activity之间通信的几种方式
答:(参考 http://blog.csdn.net/xiaanming/article/details/9750689)
a.通过Binder对象 b.通过broadcast(广播)的形式
8.如何保证service在后台不被kill
(参考 http://blog.csdn.net/mad1989/article/details/22492519)
答:a、Service设置成START_STICKY(onStartCommand方法中),kill 后会被重启(等
待5秒左右),重传Intent,保持与重启前一样.b、通过 startForeground将进程设置为
前台进程,做前台服务,优先级和前台应用一个级别?,除非在系统内存非常缺,否则此
进程不会被 kill.c、双进程Service:让2个进程互相保护,其中一个Service被清理后,
另外没被清理的进程可以立即重启进程.d、AlarmManager不断启动service
9.Android中activity、service、broadcastReceiver的作用
应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监
听并处理用户的事件做出响应。
一个Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。
你的应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者
数据网络可用时)进行接收并做出响应。
Content Provider使一个应用程序的指定数据集提供给其他应用程序,实现多个应用程序
间共享数据。它的好处:统一数据访问方式。
10.什么情况导致内存泄漏,如何避免?
答:a.不使用setImageBitmap等方法设置一张大图,通过BitmapFactory.decodeStream方
法创建一个bitmap。b.对图片进行压缩。c.使用缓存。d.使用LruCache的ImageLoader。
e.借助第三方框架,picasso,xUtils中的bitmapUtils,volley等。
11.进程的优先级
答:按android系统优先杀死的顺序排列为:1.空进程;2.后台进程;3.服务进程;4.可见
进程;5.前台进程。一般来说,前台进程Android系统是不会杀死的,只有当前4个都杀掉
资源依旧不够才可能会发生。
12.传值和传引用的区别?
13.view的绘制过程
答: Android的View绘制是从根节点(Activity是DecorView)开始,他是一个自上而下
的过程。View的绘制经历三个过程:Measure、Layout、Draw。
14.Android中的“Application”,“Task”,“Activities”的关系
答:a.任何一个Android Application基本上是由一些Activities组成,当用户与应用程
序交互时其所包含的部分Activities具有紧密的逻辑关系,或者各自独立处理不同的响应
。这些Activities捆绑在一起成为了一个处理特定需求的Application, 并且以“.apk”
作为后缀名存在于文件系统中。
b.一个Task就是用户体验上的一个“应用”。它将相关的Activity组合在一起,以stack
的方式管理,这就是Task。在Android平台上可以将task简单的理解为幽多个Activity共
同协作完成某项应用,而不管Activity具体属于哪个Application,
15.String和StringBuffer的区别
答:string对象是不可变的,线程安全。StringBuilder与StringBuffer这两种对象都是
可变的。StringBuffer对方法加了同步锁,所以是线程安全的。StringBuilder并没有对
方法进行加同步锁,所以是非线程安全的。
16.AsyncTask的用法举例
答:class MyTask extends AsyncTask<String, Integer, String> {里面要重写四个方
法,一般在doInBackground()方法中执行具体的耗时任务,在OnProgressUpdate()中
进行更新UI操作,在onPreExecute()中进行界面的初始化,最后在onPostExecute()
方法中做收尾工作,比如关闭对话框pdialog.dismiss();
17.WebView如何获取网页中的标题、内容和图片
http://www.th7.cn/Program/Android/201608/935713.shtml
18.java object的wait和Thread的sleep方法区别
留给大家自己百度,欢迎交流。
相关文章推荐
- 2017已来,最全面试总结——这些Android面试题你一定需要
- 2017已来,最全面试总结——这些Android面试题你一定需要
- 2017腾讯实习生Android客户端开发面试总结
- [干货]2017已来,最全面试总结——这些Android面试题你一定需要
- 2017 Android秋招面试总结
- Android面试总结2017版
- 2017已来,最全面试总结——这些Android面试题你一定需要
- [干货]2017已来,最全面试总结——这些Android面试题你一定需要
- [干货]2017已来,最全面试总结——这些Android面试题你一定需要
- android初级面试总结
- 面试时被问Android的调试工具,今天总结一下
- Android求职之面试总结
- Android求职之面试总结
- android面试总结加强再加强版
- 凤凰网_2014届_Android研发(笔试+面试总结)
- 最近android面试问题总结,你会几个?
- android----面试基础概括总结
- 2013 Android面试精华总结
- (20120731)android面试总结(001)