2018android最新面试题

时间:2021-05-24 13:49:28

1.android的四大组件及使用场景?(重点问contentprovider)?

一、Activity

应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity之间通过Intent进行通信。

二、Service

一个Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。

比较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个activity,让使用者可以选择歌曲并播放歌曲。然而,音乐重放这个功能并没有对应的activity,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。在这个例子中,媒体播放器这个activity 会使用Context.startService()来启动一个service,从而可以在后台保持音乐的播放。同时,系统也将保持这个service 一直执行,直到这个service 运行结束。另外,我们还可以通过使用Context.bindService()方法,连接到一个service 上(如果这个service 还没有运行将启动它)。当连接到一个service 之后,我们还可以service 提供的接口与它进行通讯。拿媒体播放器这个例子来说,我们还可以进行暂停、重播等操作。

三、Content Provider

主要用于多个应用间数据共享。这些数据可以存储在文件系统中或SQLite数据库也就是通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对指定应用中的数据进行操作。ContentProvider分为系统的和自定义的,系统的也就是例如联系人,图片等数据。

内容提供者将一些特定的应用程序数据供给其它应用程序使用。数据可以存储于文件系统、SQLite数据库或其它方式。内容提供者继承于ContentProvider 基类,为其它应用程序取用和存储它管理的数据实现了一套标准方法。然而,应用程序并不直接调用这些方法,而是使用一个 ContentResolver 对象,调用它的方法作为替代。

ContentResolver

当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver类来完成,要获取ContentResolver对象,可以使用Context提供的getContentResolver()方法。

四、BroadcastReceiver

你的应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice 来响应它们收到的信息。

在 Android 里面有各种各样的广播,比如电池的使用状态,电话的接收和短信的接收都会产生一个广播,应用程序开发者也可以监听这些广播并做出程序逻辑的处理。

广播分为普通广播、异步广播、有序广播。

广播接收者( BroadcastReceiver )用于接收广播 Intent ,广播 Intent 的发送是通过调用 Context.sendBroadcast() 、 Context.sendOrderedBroadcast() 来实现的。通常一个广播 Intent 可以被订阅了此 Intent 的多个广播接收者所接收。

2.android中broadcastreceiver注册有几种及区别?

第一种是在android的manifest中静态注册:

<receiver android: name =“包名.自己扩展的广播接收者名”>

                <intent-filter>

                            <!----和Intent中的action对应--->

                            <actionandroid:name=“com.forrest.action.mybroadcast”/>

                </intent-filter>

</receiver>

第二种是在代码中动态注册:

IntentFilter filter = new IntentFilter(“com.forrest.action.mybroadcast”);//和广播中Intent的action对应;

MyBroadcastReceiver br= newMyBroadcastReceiver();

registerReceiver(br, filter);  // registerReceiver(BroadcastReceiver receiver, IntentFilter filter);

但此方法需要解除所注册的广播:

在onStop()或onDestroy()方法中添加unRegisterReceiver(br);

两种注册类型的区别是:

     1)第一种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。

     2)第二种不是常驻型广播,也就是说广播跟随程序的生命周期。

3.RecyclerView和listview区别

RecyclerView 基础使用关键点同样有两点:
  继承重写 RecyclerView.Adapter 和 RecyclerView.ViewHolder
  设置布局管理器,控制布局效果

RecyclerView 相比 ListView 在基础使用上的区别主要有如下几点:
  ViewHolder 的编写规范化了
  RecyclerView 复用 Item 的工作 Google 全帮你搞定,不再需要像 ListView 那样自己调用 setTag

  RecyclerView 需要多出一步 LayoutManager 的设置工作

RecyclerView 的详细介绍

https://blog.csdn.net/lmj623565791/article/details/45059587

4.android进程间的通信方式?

Bundle,文件共享,AIDI ,Messenger,ContentProvider,eventbus

https://blog.csdn.net/qdh186/article/details/78316952

5.MVC和MVP区别?(最好了解清楚,面试官会让举个例子)

https://www.cnblogs.com/qianqiannian/p/6962991.html

6.view的事件分发

https://www.jianshu.com/p/e99b5e8bd67b点击打开链接

7.内存泄漏和内容溢出有哪些,怎么解决?

https://blog.csdn.net/ruiruihahaha/article/details/70270574点击打开链接

8.布局优化及代码优化

9.自定义view

10.String,Stringbuffer,Stringbuilder区别

https://blog.csdn.net/rmn190/article/details/1492013点击打开链接

11.handler 机制原理

12.LinkedList和ArrayList的区别?

https://www.cnblogs.com/janneystory/p/5758958.html点击打开链接

13.如何优化listview?

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

15.android中activity,view,window之间关系?