Android培训
美国上市Android培训机构

400-111-8989

热门课程

Android面试题:上海某信息公司Android开发岗位面试题

  • 时间:2017-08-15
  • 发布:Android培训
  • 来源:Android职场

本次整理的面试题为上海某公司的Android开发岗位的面试题汇总,小伙伴们可以参考并检验一下自己知识的掌握程度哟,希望在之后的面试中有所帮助,先预祝大家面试成功哟 !

公司:上海某信息公司

适用职位:Android开发

1、SharedPreferences本质是什么?以什么形式存在于APP中?

SharedPreferences是android.content.SharedPreferences包内的一个类,它主要是用来共享程序数据的。

SharedPreferences是以键值对(key-value)的方式来存储数据,它可以存储booleans, floats, ints, longs, and strings这些基本的数据类型。

SharedPreferences存储的数据是持久性的,一旦通过其存储数据,数据就一直保留着,即便是你的APP完全停止运行,从内存中完全退出,这些数据也会被保留下来,

下一次你再进入APP时,从SharedPreferences中,你仍然可以读出上一次写入的数据。从这个角度来讲,SharedPreferences存储数据的方式和xml文件类似。

但是,如果把APP卸载了,下次安装时,SharedPreferences中的数据会被清除,这点和xml文件是不一样的。

获取SharedPreferences对象的方法有两种:

getSharedPreferences()

这种方法用于APP中有多个SharedPreferences文件,通过名字来获取SharedPreferences对象;

getPreferences()

这种方法用于Activity中只有一个SharedPreferences文件时,因为只有一个,所以就不必提供名字。

实际应用时,第一种方法用的会更多。

向SharedPreferences中写数据:

通过edit()方法获取SharedPreferences.Editor对象;

调用putXXX()方法,放值,(XXX为基本数据类型);

调用commit()方法提交放入的值。

2、activity间通过Intent传递数据,有没有最小限制?数据怎么传输?

没有最小限制

最小可以发一个空字符串

最大还可以传递图片(bitmap序列化)

Intent(意图)主要是解决Android应用的各项组件之间的通讯。

为了实现传递数据这个目的需要以下步骤

Activity1需要构造一个 Intent,这个Intent用于告诉系统,我们要做"查看"动作

intent可调用putExtra来存放想要传递的数据

然后调用setClass,设置Activity1和欲调用的组件Activity2

最后调用startActivity将构造的Intent传入,系统会根据此Intent中的描述,到Activity1中找到满足此Intent要求的Activity,

系统会调用找到的 Activity2最终传入Intent

在Activity2中可使用getIntent来获取传递的Intent,并通过获取数据的方法来获取数据

代码示例:

Intent intent = new Intent(); // Activity1

intent.putExtra("one", num1);

intent.putExtra("two", num2);

intent.setClass(FirstActivity.this, SecondActivity.class);

startActivity(intent);

Intent intent = getIntent(); //Activity2

String num1 = intent.getStringExtra("one");

String num2 = intent.getStringExtra("two");

int ret = Integer.parseInt(num1) + Integer.parseInt(num2);

result.setText(ret+"");

3、横竖屏切换时候activity的生命周期?

这个生命周期跟清单文件里的配置有关系

1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期

默认首先销毁当前activity,然后重新加载

2、设置Activity的android:configChanges="orientation|keyboardHidden"时,

切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

游戏开发中, 屏幕的朝向都是写死的

4、activity中onRestart()什么时候会调用?

Activity重新获得焦点的时候,会依次执行3个生命周期方法:onRestart、onStart和onResume。

onRestart()其中一个。

5、activity被系统的下拉菜单遮挡时会调用哪个生命周期。

onCreate()初始化,创建views,绑定list的数据等等

onRestart()在Activity被停止后调用

onStart()在Activity被用户可见之前调用

onResume()在Activity和用户交互之前调用(快速,持久化)

onPause()在系统要激活另一个Activity时调用(快速)

onStop()在Activity不再可见时调用

onDestroy()在Activity被销毁时调用

被遮挡失去焦点执行onPause()方法

6、Broadcast有两种注册方式,这两种应用场景是什么?

在Android手机应用程序中开发中,需要用到BroadcastReceiver来监听广播的消息。

在自定义好BroadcastReceiver ,需要对其进行注册,注册有两种方法,

一种是在代码当中注册,注册的方法是registerReceiver(receiver,filter)(用Activity的实例来调用),取消注册的方法:unregisterReceiver(receiver),

如果一个BroadcastReceiver用于更新UI(User Interface),那么通常会使用这种方法进行注册,在Activity启动的时候进行注册,在Activity不可见后取消注册;

另一种就是在 AndroidManifest当中进行注册。

区别:

在AndroidManifest中进行注册后,不管改应用程序是否处于活动状态,都会进行监听,比如某个程序时监听 内存 的使用情况的,

当在手机上安装好后,不管改应用程序是处于什么状态,都会执行改监听方法中的内容。

在代码中进行注册后,当应用程序关闭后,就不再进行监听。我们读知道,应用程序是否省电,决定了该应用程序的受欢迎程度,

所以,对于那些没必要在程序关闭后仍然进行监听的Receiver,在代码中进行注册,无疑是一个明智的选择。

7、用一句话来描述单线程模型中Message、Handler、Message Queue、Looper之间的关系。

Message:消息;其中包含了消息ID,消息对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理

Handler:处理者;负责Message发送消息及处理。Handler通过与Looper进行沟通,从而使用Handler时,

需要实现handlerMessage(Message msg)方法来对特定的Message进行处理,例如更新UI等(主线程中才行)

MessageQueue:消息队列;用来存放Handler发送过来的消息,并按照FIFO(先入先出队列)规则执行。

当然,存放Message并非实际意义的保存,而是将Message以链表的方式串联起来的,等Looper的抽取。

Looper:消息泵,不断从MessageQueue中抽取Message执行。因此,一个线程中的MessageQueue需要一个Looper进行管理。

Looper是当前线程创建的时候产生的(UI Thread即主线程是系统帮忙创建的Looper,而如果在子线程中,

需要手动在创建线程后立即创建Looper[调用Looper.prepare()方法])。也就是说,会在当前线程上绑定一个Looper对象。

Thread:线程;负责调度消息循环,即消息循环的执行场所。

8、使用内部类的方式实现单利设计模式有什么优点?

保证只存在一个实例对象,节省资源和内存。

9、基于socket通讯,切换网络的时候需要做什么?

监听到切换网络的广播,当切换的时候要关闭socket链接,然后再开启。

10、绘制一张K线图,需要重写View的哪些方法?

有三个构造方法(一个参数、两个参数、三个参数),其中两个参数的构造方法必须有。

onDraw()方法必须有,是用来绘制View图像的

如果要改变View 的大小,需要重写onMeasure()方法。

如果要改变View在父控件中的位置,需要重写onLayout()方法

执行顺序onMeasure()===> onLayout()===> onDraw()

11.Android的内核是什么系统?

linux系统

12.如何一次往数据库写100条聊天信息?

1 先将100条聊天记录写入一个talk.txt中,没条聊天记录占一行

2 通过流读取talk.txt中的每一行数据, 保存到buffer数组,将buffer数组写入到一条insert语句中

3 执行一次insert语句即可

上一篇:职场分享:从北京到上海,17届毕业生的Android求职总结
下一篇:不要仅仅把自己定位为Android程序员

Android面经:好未来+CVTE+美团+58+京东

记一次失败的Android岗面试

Android 开发工程师 2017 面试题整理

给 Android 开发者的 31 个 Pro 版进阶小贴士

选择城市和中心
贵州省

广西省

海南省