百度面试Android面试题

时间:2022-10-05 07:58:30 试题试卷 收藏本文 下载本文

百度面试Android面试题(通用9篇)由网友“脚鸡”投稿提供,以下是小编给大家整理的百度面试Android面试题,欢迎大家前来参阅。

百度面试Android面试题

篇1:百度面试Android面试题

1.java 基础题,输入结果是什么?

public static void main(String[] args) {

String str = new String(“abc”);

char[] ch = {‘a’,'b’,'c’};

change(str,ch);

System.out.print(str+” “);

System.out.print(ch);

}

public static void change(String str,char[] ch){

str = “gbc”;

ch[0] = ‘g’;

}

2.HashMap,Hashset,ArrayList以及LinkedList集合的区别,以及各自的用法

3.Activity的启动模式有哪几种

4.介绍Handler机制

5.线程考核,解析sleep,wait,join,yield方法,以及notify 和notifyAll是如何控制线程同步的

6.android 存储方式以及各至用法

7.ListView 中BaseAdapter的使用和优化;在ListView中的item放置一个按钮,如何使用按钮对不能的item响应不同的事件

8.编程题:

题意:生成一个1-100的随机数组,但数组中的数字不能重复,即位置是随机的,但数组元素不能重复

笔试题目就只能记住这么多了.

由于笔试时间是在晚上,麦洛答好题目才交卷,时间大概用一个半小时(感觉其他人答得非常快,有的没有半个小时就交卷了).

总体上,麦洛感觉笔试题目还是比较简单的,只要平时稍微注意学习,这些题目都不是很难.

百度评卷的效率也是很高的,麦洛刚从茂业大厦(百度深圳研发中心)出来不多久,就电话通知进入面试了.第二天面试时,被麦洛瞄到了答卷的分数,93分!

面试的第一轮是第二天9:00开始,在酒店里.因为深圳这边的研发中心刚刚建立起来,面试官都是从北京飞过来的.第一轮面试的面试官,应该也是 Android工程师,这一轮问的题目基本都还行.就是其中一个题目是说,监听数据库变化的一个接口,这个接口麦洛用的比较少,所以没有答上来,就是 ContentObserver这个接口.

这一轮的题目:

1.以前做过项目的,画个简单的架构图,介绍之前的项目;

2.项目中遇到的问题,以及怎么解决的.麦洛就举了之前写的上拉下拉这个控件的例子

3.Android Activity生命周期

4.Adapter中View重用的问题

就回忆起这么多了

第一轮讨论的话题是项目比较多,都是介绍项目经验之类的.

这一关讨论了一个多小时,顺利通过.

第二轮还是面试,是另外一个工程师来面试,就是面试官交换面试.

这一轮难度其实也不是特别大,但是因为问到几个麦洛没有做过的东西,被卡住了一下.

能回忆起的题目有:

1.介绍Http协议

2.Http协议实现多线程下载并支持断点续传,以及服务端是怎么支持的?

3.面向对象的理解,面向对象的原则C开发封闭原则的理解

4.android wap与net的两种连接方式

5.项目中的一些问题

这一轮主要是一些java基础知识,以及项目中的一些问题

两轮下来一个上午就过去了.麦洛也感觉精疲力尽了.然后就是吃午饭,等待第三轮面试了.

第三轮是比较轻松了.这一轮的面试应该是部门老大级别的了.随便聊聊,说说为何离职,以及有什么问题需要问的,大概半个小时就搞定了.

然后就回去等通知,要1周到两周时间.OMG!麦洛可不想等那么久啊

从笔试到面试总体感觉其实不是特别的难,只要做好准备平时注意积累,很多问题都是很好回答的.

篇2:android面试题

private TextView view_result;

private TextView view_suggest;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

findViews;

setListensers();

}

// 定义

private void findViews() {

button_calc = (Button) findViewById(R.id.submit);

field_height = (EditText) findViewById(R.id.height);

field_weight = (EditText) findViewById(R.id.weight);

view_result = (TextView) findViewById(R.id.result);

view_suggest = (TextView) findViewById(R.id.suggest);

}

// Listen for button clicks

private void setListeners() {

calcbutton.setOnClickListener(calcBMI);

}

private Button.OnClickListener calcBMI = new Button.OnClickListener() {

public void onClick(View v) {

DecimalFormat nf = new DecimalFormat(“0.0”);

double height = Double.parseDouble(field_height.getText().toString()) / 100;

double weight = Double.parseDouble(field_weight.getText().toString());

double BMI = weight / (height * height);

// Present result

view_result.setText(getText(R.string.bmi_result) + nf.format(BMI));

// Give health advice

if (BMI > 25) {

view_suggest.setText(R.string.advice_heavy);

} else if (BMI < 20) {

view_suggest.setText(R.string.advice_light);

} else {

view_suggest.setText(R.string.advice_average);

}

}

};

}

总结:

关于项目

在就是你项目经验,一定要突出你遇到什么难点,然后是怎么解决的!把问题引导到你熟悉的领域,或者知识点上,尽量将每个技术点细节凸显出来,

心态:

什么样的面试官都有,去面试的时候要做好一切心理准备,不管是技术还是基础都得扎实。一个人的交谈能力也很重要,总之不是非常标准的普通话, 最起码你说的得让别人听得懂,而且得把面试官讲得非常彻底,这样你获得offer的机会更大,谈工资也有优势~~

篇3:android面试题

Intent intent = new Intent(this,B.class);

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

局限性 :所有的activity的启动模式都要是默认的启动模式

讲一讲你对activity的理解

把上面的几点用自己的心得写出来

8. service是否在main thread中执行, service里面是否能执行耗时的操作?

默认情况,如果没有显示的指定service所运行的进程, Service和activity是运行在当前app所在进程的main thread(UI主线程)里面

service里面不能执行耗时的操作(网络请求,拷贝数据库,大文件 )

在子线程中执行 new Thread(){}.start();

特殊情况 ,可以在清单文件配置 service 执行所在的进程 ,让service在另外的进程中执行

9. 两个Activity之间怎么传递数据?

基本数据类型可以通过. Intent 传递数据

extras.putDouble(key, value)

intent.putExtra(name, value)

// 通过intent putExtra 方法 基本数据类型 都传递

Bundle bundle = new Bundle();

bumdle.putShort(key, value);

intent.putExtras(bundle);

intent.putExtras(bundle)

获取到激活他的 getIntent();

Intent intent = getIntent();

Bundle bundle = intent.getExtras();

intent.getStringExtra(“key”,“value”);

intent.getBooleanExtra(“key”,“value”)

Application 全局里面存放 对象 ,自己去实现自己的application的这个类,基础系统的application , 每个activity都可以取到

让对象实现 implements Serializable 接口把对象存放到文件上.

让类实现Serializable 接口,然后可以通过 ObjectOutputStream //对象输出流

File file = new File(“c:\1.obj”);

FileOutputStream fos = new FileOutputStream(file);

ObjectOutputStream oos = new ObjectOutputStream(fos);

Student stu = new Student();

stu.setId(“10001”);

stu.setName(“zs”);

oos.writeObject(stu);

FileInputStream fis = new FileInputStream(file);

ObjectInputStream ois = new ObjectInputStream(fis);

Student stu1 = (Student) ois.readObject();

System.out.println(stu1.getName());

Parcelable 和 Serializable

Parcelable 把对象序列化到android操作系统 的一块公用的内存空间

文件/网络

intent.setData(Uri)

Uri.fromFile(); //大图片的传递

contentResolver.getInputStream(url);

10. 怎么让在启动一个Activity是就启动一个service?

在activity的onCreate()方法里面 startService();

11. 同一个程序,但不同的Activity是否可以放在不同的Task任务栈中?

比方说在激活一个新的activity时候, 给intent设置flag

Intent的flag添加FLAG_ACTIVITY_NEW_TASK

这个被激活的activity就会在新的task栈里面…

Intent intent = new Intent(A.this,B.class);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(intent);

12. Activity怎么和service绑定,怎么在activity中启动自己对应的service?

startService() 一旦被创建 调用着无关 没法使用service里面的方法

bindService () 把service 与调用者绑定 ,如果调用者被销毁, service会销毁

bindService() 我们可以使用service 里面的方法

bindService(). 让activity能够访问到 service里面的方法

构建一个intent对象,

Intent service = new Intent(this,MyService.class);

通过bindService的方法去启动一个服务,

bindService(intent, new MyConn(), BIND_AUTO_CREATE);

ServiceConnection 对象(重写onServiceConnected和OnServiceDisconnected方法) 和BIND_AUTO_CREATE.

private class myconn implements ServiceConnection

{

public void onServiceConnected(ComponentName name, IBinder service) {

// TODO Auto-generated method stub

//可以通过IBinder的对象 去使用service里面的方法

}

public void onServiceDisconnected(ComponentName name) {

// TODO Auto-generated method stub

}

13. 14 .什么是Service以及描述下它的生命周期。Service有哪些启动方法,有什么区别,怎样停用Service?

在Service的生命周期中,被回调的方法比Activity少一些,只有onCreate, onStart, onDestroy,

onBind和onUnbind。

通常有两种方式启动一个Service,他们对Service生命周期的影响是不一样的。

1 通过startService

Service会经历 onCreate 到onStart,然后处于运行状态,stopService的时候调用onDestroy方法。

如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。

2 通过bindService

Service会运行onCreate,然后是调用onBind, 这个时候调用者和Service绑定在一起。调用者退出了,Srevice就会调用onUnbind->onDestroyed方法。

所谓绑定在一起就共存亡了。调用者也可以通过调用unbindService方法来停止服务,这时候Srevice就会调用onUnbind->onDestroyed方法。

篇4:android面试题

如果后台的activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?

如何将一个activity设置成窗口的样式。(edited by sodino)

如何退出activity?如何安全退出已调用多个activity的application?

请介绍下android中常用的五种布局。

请介绍下android的数据存储方式。(edited by sodino)

请介绍下contentprovider是如何实现数据共享的。(edited by sodino)

如何启用service,如何停用service。(edited by sodino)

注册广播有几种方式,这些方式有何优缺点?请谈谈android引入广播机制的用意。

请解释下在单线程模型中message、handler、message queue、looper之间的关系。

aidl的全称是什么?如何工作?能处理哪些类型的数据?

请解释下android程序运行时权限与文件系统权限的区别。(edited by sodino)

系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。

嵌入式操作系统内存管理有哪几种,各有何特性 ?

页式,段式,段页,用到了mmu,虚拟空间等技术

什么是嵌入式实时操作系统, android 操作系统属于实时操作系统吗?

嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。主要用于工业控制、军事设备、 航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。又可分为软实时和硬实时两种,而android是基于linux内核的,因此属于软实时。

一条最长的短信息约占多少byte?

中文70(包括标点),英文160个字节

android中的动画有哪几类,它们的特点和区别是什么?

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

handler机制的原理

andriod提供了 handler 和 looper 来满足线程间的通信。handler 先进先出原则。looper类用来管理特定线程内对象之间的消息交换(message exchange)。 1)looper: 一个线程可以产生一个looper对象,由它来管理此线程里的message queue(消息队列)。 2)handler: 你可以构造handler对象来与looper沟通,以便push新消息到message queue里;或者接收looper从message queue取出)所送来的消息。 3) message queue(消息队列):用来存放线程放入的消息。 4)线程:ui thread 通常就是main thread,而android启动程序时会替它建立一个message queue。

说说mvc模式的原理,

它在android中的运用 mvc(model_view_contraller)” 模型_视图_控制器”。 mvc应用程序总是由这三个部分组成。event(事件)导致controller改变model或view,或者同时改变两者。只要 controller改变了models的数据或者属性,所有依赖的view都会自动更新。类似的,只要controller改变了view,view会 从潜在的model中获取数据来刷新自己

(view重绘和内存泄露面试经常问的问题 )

view的刷新:

在需要刷新的地方,使用handle.sendmessage发送信息,然后在handle的getmessage里面执行invaliate或者postinvaliate。

可以调用invalidate和postinvalidate()这两个方法刷新

gc内存泄露 出现情况:

1).数据库的cursor没有关闭

2).构造adapter时,没有使用缓存contentview 衍生listview的优化问题-----减少创建view的对象,充分使用contentview,可以使用一静态类来优化处理getview的过程/

3).bitmap对象不使用时采用recycle()释放内存

4).activity中的对象的生命周期大于activity 调试方法: ddms==> heapszie==>dataobject==>[total size]

篇5:android面试题

一条最长的短信息约占多少byte?

中文70(包括标点),英文160个字节

android中的动画有哪几类,它们的特点和区别是什么?

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

handler机制的原理

andriod提供了 Handler 和 Looper 来满足线程间的通信。Handler 先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(Message Exchange)。 1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列)。 2)Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper从Message Queue取出)所送来的消息。 3) Message Queue(消息队列):用来存放线程放入的消息。 4)线程:UI thread 通常就是main thread,而Android启动程序时会替它建立一个Message Queue。

说说mvc模式的原理,

它在android中的运用 MVC(Model_view_contraller)” 模型_视图_控制器”。 MVC应用程序总是由这三个部分组成。Event(事件)导致Controller改变Model或View,或者同时改变两者。只要 Controller改变了Models的数据或者属性,所有依赖的View都会自动更新。类似的,只要Controller改变了View,View会 从潜在的Model中获取数据来刷新自己

(View重绘和内存泄露面试经常问的问题 )

View的刷新:

在需要刷新的地方,使用handle.sendmessage发送信息,然后在handle的getmessage里面执行invaliate或者postinvaliate。

可以调用invalidate()和postInvalidate()这两个方法刷新

GC内存泄露 出现情况:

1).数据库的cursor没有关闭

2).构造adapter时,没有使用缓存contentview 衍生listview的优化问题-----减少创建view的对象,充分使用contentview,可以使用一静态类来优化处理getview的过程/

3).Bitmap对象不使用时采用recycle()释放内存

4).activity中的对象的生命周期大于activity 调试方法: DDMS==> HEAPSZIE==>dataobject==>[Total Size]

篇6:android面试题

需要注意的是如果这几个方法交织在一起的话,会出现什么情况呢?

一个原则是Service的onCreate的方法只会被调用一次,就是你无论多少次的startService又bindService,Service只被创建一次。

如果先是bind了,那么start的时候就直接运行Service的onStart方法,如果先是start,那么bind的时候就直接运行onBind方法。

如果service运行期间调用了bindService,这时候再调用stopService的话,service是不会调用onDestroy方法的,service就stop不掉了,只能调用UnbindService, service就会被销毁

如果一个service通过startService 被start之后,多次调用startService 的话,service会多次调用onStart方法。多次调用stopService的话,service只会调用一次onDestroyed方法。

如果一个service通过bindService被start之后,多次调用bindService的话,service只会调用一次onBind方法。

多次调用unbindService的话会抛出异常。

15. 不用service,B页面为音乐播放,从A跳转到B,再返回,如何使音乐继续播放?

这个问题问的很山寨.默认不做任何处理,B里面的音乐都能播放.

遇到问题, 可以随机应变,灵活发挥,多考虑些细节,比如说这个题就可以这样说,说说你对startActivityForResult的理解

A开启B的时候,用startActivityForResult()方法, B返回的时候把播放的状态信息返回给A ,A继续播放音乐.

16. 什么是IntentService?有何优点?

普通的service ,默认运行在ui main 主线程

Sdk给我们提供的方便的,带有异步处理的service类,

异步处理的方法 OnHandleIntent()

OnHandleIntent() 处理耗时的操作

17. 什么时候使用Service?

拥有service的进程具有较高的优先级

官方文档告诉我们,Android系统会尽量保持拥有service的进程运行,只要在该service已经被启动(start)或者客户端连接(bindService)到它。当内存不足时,需要保持,拥有service的进程具有较高的优先级。

1. 如果service正在调用onCreate, onStartCommand或者onDestory方法,那么用于当前service的进程相当于前台进程以避免被killed。

2. 如果当前service已经被启动(start),拥有它的进程则比那些用户可见的进程优先级低一些,但是比那些不可见的进程更重要,这就意味着service一般不会被killed.

3. 如果客户端已经连接到service (bindService),那么拥有Service的进程则拥有最高的优先级,可以认为service是可见的。

4. 如果service可以使用startForeground(true)方法来将service设置为前台状态,那么系统就认为是对用户可见的,并不会在内存不足时killed。

如果有其他的应用组件作为Service,Activity等运行在相同的进程中,那么将会增加该进程的重要性。

1.Service的特点可以让他在后台一直运行,可以在service里面创建线程去完成耗时的操作. 天气预报 widget TimerTask Timer 定期执行timertask

2.Broadcast receiver捕获到一个事件之后,可以起一个service来完成一个耗时的操作.

Broadcast receiver生命周期 和 响应时间很短

3.远程的service如果被启动起来,可以被多次bind, 但不会重新create. 索爱手机X10i的人脸识别的service可以被图库使用,可以被摄像机,照相机等程序使用.

18. 请描述一下Intent 和 Intent Filter。

Android 中通过 Intent 对象来表示一条消息,一个 Intent 对象不仅包含有这个消息的目的地,还可以包含消息的内容,这好比一封 Email,其中不仅应该包含收件地址,还可以包含具体的内容。对于一个 Intent 对象,消息“目的地”是必须的,而内容则是可选项。

通过Intent 可以实现各种系统组件的调用与激活.

Intent filter: 可以理解为邮局或者是一个信笺的分拣系统…

这个分拣系统通过3个参数来识别

Action: 动作 view

Data: 数据uri uri

Category : 而外的附加信息

Action 匹配

Action 是一个用户定义的字符串,用于描述一个 Android 应用程序组件,一个 Intent Filter 可以包含多个 Action。在 AndroidManifest.xml 的 Activity 定义时可以在其 节点指定一个 Action 列表用于标示 Activity 所能接受的“动作”,例如:

……

如果我们在启动一个 Activity 时使用这样的 Intent 对象:

Intent intent =new Intent();

intent.setAction(“cn.itcast.action”);

那么所有的 Action 列表中包含了“cn.itcast”的 Activity 都将会匹配成功。

Android 预定义了一系列的 Action 分别表示特定的系统动作。这些 Action 通过常量的方式定义在 android.content. Intent中,以“ACTION_”开头。我们可以在 Android 提供的文档中找到它们的详细说明。

URI 数据匹配

一个 Intent 可以通过 URI 携带外部数据给目标组件。在 节点中,通过 节点匹配外部数据。

mimeType 属性指定携带外部数据的数据类型,scheme 指定协议,host、port、path 指定数据的位置、端口、和路径。如下:

android:host=“host” android:port=“port” android:path=“path”/>

电话的uri tel: 12345

www.baidu.com

自己定义的uri itcast://cn.itcast/person/10

如果在 Intent Filter 中指定了这些属性,那么只有所有的属性都匹配成功时 URI 数据匹配才会成功。

Category 类别匹配

节点中可以为组件定义一个 Category 类别列表,当 Intent 中包含这个列表的所有项目时 Category 类别匹配才会成功。

默认是DEFAULT

篇7:android面试题

sms.sendTextMessage(phoneNumber, null, msg, pi, null);

}

52. Linux中跨进程通信的几种方式 。

linux编程

# 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

# 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。

# 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

# 消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

# 信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

# 共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。

# 套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。

53. 谈谈对Android NDK的理解。

native develop kit 只是一个交叉编译的工具 .so

1.什么时候用ndk, 实时性要求高,游戏,图形渲染,

opencv (人脸识别) , ffmpeg , rmvb mp5 avi 高清解码. ffmpeg, opencore.

2.为什么用ndk,ndk的优点 ,缺点 ,

我们项目中那些地方用到了ndk,

54. 谈谈Android的优点和不足之处。

1、开放性,开源 ophone 阿里云( 完全兼容android)

2、挣脱运营商束缚

3、丰富的硬件选择 mtk android

4、不受任何限制的开发商

5、无缝结合的Google应用

缺点也有5处:

1、安全问题、隐私问题

2、卖手机的不是最大运营商

3、运营商对Android手机仍然有影响

4、山寨化严重

5、过分依赖开发商,缺乏标准配置 版本过多

55. Android系统中GC什么情况下会出现内存泄露呢? 视频编解码/内存泄露

检测内存泄露 工具

导致内存泄漏主要的原因是,先前申请了内存空间而忘记了释放。如果程序中存在对无用对象的引用,那么这些对象就会驻留内存,消耗内存,因为无法让垃圾回收器GC验证这些对象是否不再需要。如果存在对象的引用,这个对象就被定义为“有效的活动”,同时不会被释放。要确定对象所占内存将被回收,我们就要务必确认该对象不再会被使用。典型的做法就是把对象数据成员设为null或者从集合中移除该对象。但当局部变量不需要时,不需明显的设为null,因为一个方法执行完毕时,这些引用会自动被清理。

Java带垃圾回收的机制,为什么还会内存泄露呢?

Vector v = new Vector(10);

for (int i = 1; i < 100; i++) {

Object o = new Object();

v.add(o);

o = null;

}//此时,所有的Object对象都没有被释放,因为变量v引用这些对象。

Java 内存泄露的根本原因就是 保存了不可能再被访问的变量类型的引用

56. Android UI中的View如何刷新。

在主线程中 拿到view调用Invalide()方法,查看画画板里面更新imageview的方法

在子线程里面可以通过postInvalide()方法;

57. 简单描述下Android 数字签名。

Android 数字签名

在Android系统中,所有安装到系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系

Android系统要求每一个安装进系统的应用程序都是经过数字证书签名的,数字证书的私钥则保存在程序开发者的手中。Android将数字证书用来标识应用程序的作者和在应用程序之间建立信任关系,不是用来决定最终用户可以安装哪些应用程序。

这个数字证书并不需要权威的数字证书签名机构认证(CA),它只是用来让应用程序包自我认证的。

同一个开发者的多个程序尽可能使用同一个数字证书,这可以带来以下好处。

(1)有利于程序升级,当新版程序和旧版程序的数字证书相同时,Android系统才会认为这两个程序是同一个程序的不同版本。如果新版程序和旧版程序的数字证书不相同,则Android系统认为他们是不同的程序,并产生冲突,会要求新程序更改包名。

(2)有利于程序的模块化设计和开发。Android系统允许拥有同一个数字签名的程序运行在一个进程中,Android程序会将他们视为同一个程序。所以开发者可以将自己的程序分模块开发,而用户只需要在需要的时候下载适当的模块。

在签名时,需要考虑数字证书的有效期:

(1)数字证书的有效期要包含程序的预计生命周期,一旦数字证书失效,持有改数字证书的程序将不能正常升级。

(2)如果多个程序使用同一个数字证书,则该数字证书的有效期要包含所有程序的预计生命周期。

(3)Android Market强制要求所有应用程序数字证书的有效期要持续到2033年10月22日以后。

Android数字证书包含以下几个要点:

(1)所有的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序

(2)Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证

(3)如果要正式发布一个Android ,必须使用一个合适的私钥生成的数字证书来给程序签名,而不能使用adt插件或者ant工具生成的调试证书来发布。

篇8:android面试题

比如,启动一个浏览器,在Android中是一个比较沉重的过程,它需要做很多初始化的工作,并且会有不小的内存开销。但与此同时,用浏览器打开一些内容,又是一般应用都会有的一个需求。设想一下,如果同时有十个运行着的应用(就会对应着是多个Task),都需要启动浏览器,这将是一个多么残酷的场面,十个Task栈都堆积着很雷同的浏览器Activity,

是多么华丽的一种浪费啊。

于是你会有这样一种设想,浏览器Activity,可不可以作为一个单独的Task而存在,不管是来自那个Task的请求,浏览器的Task,都不会归并过去。这样,虽然浏览器Activity本身需要维系的状态更多了,但整体的开销将大大的减少,这种舍小家为大家的行为,还是很值得歌颂的

standard“, ”singleTop“, ”singleTask“, ”singleInstance“。

standard模式, 是默认的也是标准的Task模式,在没有其他因素的影响下,使用此模式的Activity,会构造一个Activity的实例,加入到调用者的Task栈中去,对于使用频度一般开销一般什么都一般的Activity而言,standard模式无疑是最合适的,因为它逻辑简单条理清晰,所以是默认的选择。

而singleTop模式,基本上于standard一致,仅在请求的Activity正好位于栈顶时,有所区别。此时,配置成singleTop的Activity,不再会构造新的实例加入到Task栈中,而是将新来的Intent发送到栈顶Activity中,栈顶的Activity可以通过重载onNewIntent来处理新的Intent(当然,也可以无视...)。这个模式,降低了位于栈顶时的一些重复开销,更避免了一些奇异的行为(想象一下,如果在栈顶连续几个都是同样的Activity,再一级级退出的时候,这是怎么样的用户体验...),很适合一些会有更新的列表Activity展示。一个活生生的实例是,在Android默认提供的应用中,浏览器(Browser)的书签Activity(BrowserBookmarkPage),就用的是singleTop。

singleTask,和singleInstance,则都采取的另辟Task的蹊径。

标志为singleTask的Activity,最多仅有一个实例存在,并且,位于以它为根的Task中。所有对该Activity的请求,都会跳到该Activity的Task中展开进行。singleTask,很象概念中的单件模式,所有的修改都是基于一个实例,这通常用在构造成本很大,但切换成本较小的Activity中。最典型的例子,还是浏览器应用的主Activity(名为Browser...),它是展示当前tab,当前页面内容的窗口。它的构造成本大,但页面的切换还是较快的,于singleTask相配,还是挺天作之合的。

singleInstance显得更为极端一些。在大部分时候singleInstance与singleTask完全一致,唯一的不同在于,singleInstance的Activity,是它所在栈中仅有的一个Activity,如果涉及到的其他Activity,都移交到其他Task中进行。这使得singleInstance的Activity,像一座孤岛,彻底的黑盒,它不关注请求来自何方,也不计较后续由谁执行。在Android默认的各个应用中,很少有这样的Activity,在我个人的工程实践中,曾尝试在有道词典的快速取词Activity中采用过,

是因为我觉得快速取词入口足够方便(从notification中点选进入),并且会在各个场合使用,应该做得完全独立。

大的apk 拆成 很多小的apk

●Activity的 android:taskAffinity=”“属性 姻缘关系

1.配置后 当启动这个activity时就先去找有没有activity的亲和力属性相同 有就加入这个

activity所在的任务中没有就新开任务

2.affinity起作用需要的条件而者具备一个:

1.intent包含FLAG_ACTIVITY_NEW_TASK标记

2.activity元素启用了allowTaskReparenting属性.

43. 在Android中,怎么节省内存的使用,怎么主动回收内存?

回收已经使用的资源,

合理的使用缓存

合理设置变量的作用范围… application 对象

//未来的某一段时间执行

System.gc;

44. 不同工程中的方法是否可以相互调用?

可以,列举aidl访问远程服务的例子.

45. 在Android中是如何实现判断区分电话的状态,去电,来电、未接来电?

Day8 showAddressService.java

46. dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念

Dvm的进程是dalivk虚拟机进程,每个android程序都运行在自己的进程里面,

每个android程序系统都会给他分配一个单独的liunx uid(user id),

每个dvm都是linux里面的一个进程.所以说这两个进程是一个进程.

47. sim卡的EF 文件有何作用

Sim卡相关的东西,没接触过

48. 如何判断是否有SD卡?

配置文件中有sd卡的权限, 通过environment的静态方法,

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {

49. 嵌入式操作系统内存管理有哪几种, 各有何特性。

页式,段式,段页,等 …

50. 什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?

实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。主要用于工业控制、军事设备、航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。又可分为软实时和硬实时两种,而android是基于linux内核的,因此属于软实时。

硬实时. 火星探测车.

软实时.

51. 一条最长的短信息约占多少byte?

中文70(包括标点),英文160,160个字节 这个说法不准确,

要跟手机制式运营商等信息有关.

做实验,看源码

ArrayList msgs = sms.divideMessage(message);

for (String msg : msgs) {

篇9:android面试题

(4)数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。

58. 什么是ANR 如何避免它?

在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择让程序继续运行,但是,他们在使用你的应用程序时,并不希望每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样,系统不会显示ANR给用户。

Activity 5秒 broadcast10秒

耗时的操作 worker thread里面完成, handler message…AsynTask , intentservice.等…

59. android中的动画有哪几类,它们的特点和区别是什么?

两种,一种是Tween动画、还有一种是Frame动画。

Tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;

可以通过布局文件,可以通过代码

1、 控制View的动画

a) alpha(AlphaAnimation)

渐变透明

b) scale(ScaleAnimation)

渐变尺寸伸缩

c) translate(TranslateAnimation)

画面转换、位置移动

d) rotate(RotateAnimation)

画面转移,旋转动画

2、 控制一个Layout里面子View的动画效果

a) layoutAnimation(LayoutAnimationController)

b) gridAnimation(GridLayoutAnimationController)

另一种Frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。

62. 说说mvc模式的原理,它在android中的运用。

MVC英文即Model-View-Controller,即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层――模型层、视图层、控制层。

Android中界面部分也采用了当前比较流行的MVC框架,在Android中M就是应用程序中二进制的数据,V就是用户的界面。Android的界面直接采用XML文件保存的,界面开发变的很方便。在Android中C也是很简单的,一个Activity可以有多个界面,只需要将视图的ID传递到setContentView(),就指定了以哪个视图模型显示数据。

在Android SDK中的数据绑定,也都是采用了与MVC框架类似的方法来显示数据。在控制层上将数据按照视图模型的要求(也就是Android SDK中的Adapter)封装就可以直接在视图模型上显示了,从而实现了数据绑定。比如显示Cursor中所有数据的ListActivity,其视图层就是一个ListView,将数据封装为ListAdapter,并传递给ListView,数据就在ListView中显示。

63. 通过点击一个网页上的url 就可以完成程序的自动安装,描述下原理

Day11 AddJavascriptInterface

new Object{

callphone();

installapk();

}

64,Service和Activity在同一个线程吗

默认情况同一线程 main主线程 ui线程

65,java中的soft reference是个什么东西

StrongReference 是 Java 的默认引用实现, 它会尽可能长时间的存活于 JVM 内, 当没有任何对象指向它时 GC 执行后将会被回收

SoftReference 会尽可能长的保留引用直到 JVM 内存不足时才会被回收(虚拟机保证), 这一特性使得 SoftReference 非常适合缓存

应用详细见豆瓣客户端图片的缓存

66,udp连接和TCP的不同之处

tcp/滑动窗口协议. 拥塞控制.

udp 不关心数据是否达到,是否阻塞

画面优先. tcp

流畅优先 udp

67, android开发中怎么去调试bug

逻辑错误

1.断点 debug

2. logcat ,

界面布局,显示 hierarchyviewer.bat

68.service里面可以弹土司么

可以

69.写10个简单的linux命令

cat ls ps psw wc mv rm cd ping tracert find grep tail vi gcc make ifconfig

startup dhcp

70 JNI调用常用的两个参数

JNIEnv *env, jobject javaThis

71. 书写出android工程的目录结构

src

android. jar

asset

res

gen

manifest

72. ddms 和traceview的区别.

daivilk debug manager system

1.在应用的主activity的onCreate方法中加入Debug.startMethodTracing(”要生成的traceview文件的名字");

2.同样在主activity的onStop方法中加入Debug.stopMethodTracing();

3.同时要在AndroidManifest.xml文件中配置权限

3.重新编译,安装,启动服务,测试完成取对应的traceview文件(adb pull /sdcard/xxxx.trace)。

4.直接在命令行输入traceview xxxxtrace,弹出traceview窗口,分析对应的应用即可。

traceview 分析程序执行时间和效率

KPI : key performance information : 关键性能指标:

splash界面不能超过5秒

从splash 界面加载mainactivity 不能超过0.7秒

74. 利用mvc的模式重构代码

1) 重构前的代码Bmi.java:

package com.demo.android.bmi;

import java.text.DecimalFormat;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

阿里面试题

C.net web开发面试题

后台开发英文简历

百度云、阿里云、盛大云和腾讯云哪个适合托管网站?

服从意识类面试题目

安卓开发心得实例

星座成“80后”面试“宝典”

各大公司口号

各大公司新春对联

android学习方法

百度面试Android面试题
《百度面试Android面试题.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

【百度面试Android面试题(通用9篇)】相关文章:

安卓实习心得感悟2023-08-22

android简历怎么写2023-10-26

美团网 电话面试2023-09-04

面试题及答案2023-04-15

java前端开发面试题2023-10-12

美团辞职报告2022-04-30

美团评语2022-12-17

竞聘演讲稿百度经验2022-10-14

android面试题2022-05-07

设计模式之工厂模式2022-11-17

点击下载本文文档