首页 > 系统 > Android > 正文

Android面试题(二)

2019-11-09 16:36:37
字体:
来源:转载
供稿:网友

1.service的生命周期 这里写图片描述

2service是否是在mainThread中运行的,service能进行耗时操作吗? 没有明确的指明service的运行线程,service实在mainthread中运行的。 service里面不能执行耗时的操作(网络请求,拷贝数据库,大文件)

3.Service有哪些启动方法,有什么区别,怎样停用Service? (1)通过startService Service会经历onCreate(),onStart(),然后处于运行状态,stopService()时候调用 onDestroy方法 如果是调用者自己直接退出而没有调用stopService的haunted,Service会一直在后台 运行 (2)通过bindService Service会运行onCreate,然后调用onBind(),这时候调用者和Service绑定在一起。调用者退出了,Service就会调 用onUnbind->onDestroy方法 4Android service保活 (参考http://blog.csdn.net/u011200604/article/details/52217423#t8) ①利用activity提升权限 ②3.2. 利用 Notification 提升权限 ③

5自定义view的相关方法 1、自定义View的属性 2、在View的构造方法中获得我们自定义的属性 [ 3、重写onMesure ] 4、重写onDraw

6:Serializable和Parcelable的区别 相同点:都能实现序列化且可用于Intent间的数据传递 Serializable是java中的序列化接口,使用简单但开销大,序列化和反序列化过程需要大量I/O操作。 Parcelable更适合Android平台,使用麻烦但效率高,主要用在内存序列化上。

7Android 65k(65536 2的16次方)限制。 由于Android方法太多,导致打包的时候dex文件的方法数量超过65536。 解决办法: Android Studio 允许用户通过 Gradle 的设置来使用多个 DEX 文件,这样每个文件中 的方法数就会减少,也就可以绕过这个限制。 具体操作办法: 修改 build.gradle 文件

修改项目的 build.gradle 文件启用 MultiDex 并包含 MultiDex 库:

android { compileSdkVersion 21 buildToolsVersion "21.1.0" defaultConfig { ... minSdkVersion 14 targetSdkVersion 21 ... // Enabling multidex support. multiDexEnabled true } ...}dependencies { compile 'com.android.support:multidex:1.0.0'}

修改 manifest 文件

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.android.multidex.myapplication"> <application ... android:name="android.support.multidex.MultiDexApplication"> ... </application></manifest>

如果用户不想在 manifest 文件中将 MultiDexApplication 指定为全局 Application,而是想继续使用原先指定的 Application, 则可以在全局 Application 中重写

attachBaseContext() 方法,并加上 MultiDex.install(this),如下: @Override PRotected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this);}

8Android 四大组件 Activity,Service,ContentProvider,BroadcastReceiver

9Android 中的context有哪几种? Activity,Service,BroadcastReceiver,Application

10Android中的dialog为什么不能用的context是那种,为什么? 用的是activity.this, 不是用的appliation级别的,原因是:dialog是依附于activity的,他的生命周期和activity的生命周期是一样的。application的生命周期和activity的生命周期是不同的。

11andriod中的数据存储有哪些? 1.SharedPreferences共享偏好 2 文件存储: 1.Internal Storage内部存储空间 2.External Storage外部存储空间 3.SQLite Database数据库 4.contentprovider存储数据 5.网络存储。

12文件存储和数据库存储那个效率更高一些? 数据量大时使用数据库效率高 数据量小时使用文件效率高 文件适用于存储一些简单的文本数据或者二进制数据,SharedPreferences适用于存储一些键值对,而数据库则适用于那些复杂的关系型数据。 数据库存储的数据可以跨程序应用,存储复杂的关系型数据。 13请介绍下Android中常用的五种布局 FrameLayout(帧布局) LinearLayout(线性布局) AbsuLayout(绝对布局) RelativeLayout(相对布局)

14notifyDataSetChanged和notifyDataSetInvalidated的区别 notifyDataSetInvalidated(),会重绘整个控件(还原到初始状态) notifyDataSetChanged(),重绘当前可见区域

15postInvalidate与invalidate有什么区别? 都用于刷新界面 postInvalidate()用在子线程 invalidate()用在主线程

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表