2017年android面试总结
2017-02-18 18:40
267 查看
1.android的四大组件
activity:一个activity通常是一个单独的窗口,activity通过Intent进行通信,每个activity都要在AndroidMainfest.xml配置文件中声明。
service:
(1)service用于在后台完成用户指定的操作。service分为两种:
(a).started(启动):当应用组件(如activity)调用startService()方法启动服务时,服务处于started状态。
(b)bound(绑定):当应用组件调用bindService()方法绑定到服务时,服务处于bound状态。
(2)startService与bindService的区别
(a)starteService是由其他组件调用startService方法启动的,这导致服务的onStartCommand()方法被调用。当服务是started状态时,其生命周期与其他组件无关,并且可以在后台无限期运行,即使启动服务的组件已经被销毁。因此,服务需要在完成任务后调用stopself()方法停止。或者调用stopService()方法停止。
(b)使用bindService方法启动服务,将调用者和服务绑在一起,一旦调用者退出,服务也就结束。
(3)服务也要在AndroidMainfest.xml文件中申明
content provider
contentProvider可以指定需要共享的数据,而其他应用程序则可以在不知道数据来源、路径的情况下,对共享数据进行增删改查等操作。在Android系统中,许多Android系统内置的数据也是通过ContentProvider提供给用户使用,例如通讯录、音视频文件和图像文件等。通过contentProvider获得联系人。android 6.0后这个权限要申请。
broadcastreceiver
(1)你的应用可以使用它对外部事件进行过滤,只对感兴趣的外部事件进行接收
广播接收器没有用户界面。然而,它们可以启动一个activity或serice来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力,例如闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。
(2)广播接收者的注册有两种方法,分别是程序动态注册和AndroidManifest文件中进行静态注册。
(3)动态注册广播接收器特点是当用来注册的Activity关掉后,广播也就失效了。静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用。
2.activity的生命周期,转屏生命周期的变化
onCreate()->onStart()->onResume()->onPause()->onStop()->onDestroy()
转屏时需要对一些数据进行保存,例如当横竖屏区切换时要保存当前屏幕的一些数据和状态,
不修改AndroidManifest.xml,(即不添加Android:configChanges)
切换为横屏时,生命周期:
onPause()->onSaveInstanceState()->onStop()->onDestroy->onCreate()->onStart()->OnRestoreInstanceState()->onResume()
切换为竖屏
onPause()->onSaveInstanceState()->onStop()->onDestroy->onCreate()->onStart()->OnRestoreInstanceState()->onResume()
修改AndroidMainfest.xml,添加Android:configChanges="orientation"
在Android 3.2(API 13)以上的版本,在设置Activity的android:configChanges=”orientation|keyboardHidden”后,没有任何效果,切屏时依然会重新调用各个生命周期的,因为screen size也开始跟着设备的横竖切换而改变。所以,在Android 3.2后的版本,如果要防止切屏时重新调用各个生命周期,则需要加上screenSize, 例如:android:configChanges=”orientation|keyboardHidden|screenSize”,这样就只会调用onConfigurationChanged(Configuration
newConfig)方法。
3.Service与IntentService
(1)直接 创建一个默认的工作线程,该线程执行所有的intent传递给onStartCommand()区别于应用程序的主线程。
(2)直接创建一个工作队列,将一个意图传递给你onHandleIntent()的实现,所以我们就永远不必担心多线程。
(3)当请求完成后自己会调用stopSelf(),所以你就不用调用该方法了。
(4)提供的默认实现onBind()返回null,所以也不需要重写这个方法。
(5)提供了一个默认实现onStartCommand(),将意图工作队列,然后发送到你onHandleIntent()实现。真是太方便了
4.android异步方法
1.继承Thread类
2.实现Runable接口
3.AsycTask
4.Handler
5
activity:一个activity通常是一个单独的窗口,activity通过Intent进行通信,每个activity都要在AndroidMainfest.xml配置文件中声明。
service:
(1)service用于在后台完成用户指定的操作。service分为两种:
(a).started(启动):当应用组件(如activity)调用startService()方法启动服务时,服务处于started状态。
(b)bound(绑定):当应用组件调用bindService()方法绑定到服务时,服务处于bound状态。
(2)startService与bindService的区别
(a)starteService是由其他组件调用startService方法启动的,这导致服务的onStartCommand()方法被调用。当服务是started状态时,其生命周期与其他组件无关,并且可以在后台无限期运行,即使启动服务的组件已经被销毁。因此,服务需要在完成任务后调用stopself()方法停止。或者调用stopService()方法停止。
(b)使用bindService方法启动服务,将调用者和服务绑在一起,一旦调用者退出,服务也就结束。
(3)服务也要在AndroidMainfest.xml文件中申明
content provider
contentProvider可以指定需要共享的数据,而其他应用程序则可以在不知道数据来源、路径的情况下,对共享数据进行增删改查等操作。在Android系统中,许多Android系统内置的数据也是通过ContentProvider提供给用户使用,例如通讯录、音视频文件和图像文件等。通过contentProvider获得联系人。android 6.0后这个权限要申请。
cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null); while(cursor.moveToNext()){ //获取联系人姓名 String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); //获取联系人手机号 String displayPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); contractList.add(displayName+"\n"+displayPhone);
broadcastreceiver
(1)你的应用可以使用它对外部事件进行过滤,只对感兴趣的外部事件进行接收
广播接收器没有用户界面。然而,它们可以启动一个activity或serice来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力,例如闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。
(2)广播接收者的注册有两种方法,分别是程序动态注册和AndroidManifest文件中进行静态注册。
(3)动态注册广播接收器特点是当用来注册的Activity关掉后,广播也就失效了。静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用。
2.activity的生命周期,转屏生命周期的变化
onCreate()->onStart()->onResume()->onPause()->onStop()->onDestroy()
转屏时需要对一些数据进行保存,例如当横竖屏区切换时要保存当前屏幕的一些数据和状态,
不修改AndroidManifest.xml,(即不添加Android:configChanges)
切换为横屏时,生命周期:
onPause()->onSaveInstanceState()->onStop()->onDestroy->onCreate()->onStart()->OnRestoreInstanceState()->onResume()
切换为竖屏
onPause()->onSaveInstanceState()->onStop()->onDestroy->onCreate()->onStart()->OnRestoreInstanceState()->onResume()
修改AndroidMainfest.xml,添加Android:configChanges="orientation"
在Android 3.2(API 13)以上的版本,在设置Activity的android:configChanges=”orientation|keyboardHidden”后,没有任何效果,切屏时依然会重新调用各个生命周期的,因为screen size也开始跟着设备的横竖切换而改变。所以,在Android 3.2后的版本,如果要防止切屏时重新调用各个生命周期,则需要加上screenSize, 例如:android:configChanges=”orientation|keyboardHidden|screenSize”,这样就只会调用onConfigurationChanged(Configuration
newConfig)方法。
3.Service与IntentService
(1)直接 创建一个默认的工作线程,该线程执行所有的intent传递给onStartCommand()区别于应用程序的主线程。
(2)直接创建一个工作队列,将一个意图传递给你onHandleIntent()的实现,所以我们就永远不必担心多线程。
(3)当请求完成后自己会调用stopSelf(),所以你就不用调用该方法了。
(4)提供的默认实现onBind()返回null,所以也不需要重写这个方法。
(5)提供了一个默认实现onStartCommand(),将意图工作队列,然后发送到你onHandleIntent()实现。真是太方便了
4.android异步方法
1.继承Thread类
2.实现Runable接口
3.AsycTask
4.Handler
5
相关文章推荐
- 2017年android面试总结
- 2017年深信服Android开发岗位笔试面试总结
- 面试必备:Android笔试总结
- android面试基础总结
- 面试时被问Android的调试工具,今天总结一下
- Android求职之面试总结
- Android求职之面试总结
- 一些常见的Android面试基础题总结
- 凤凰网_2014届_Android研发(笔试+面试总结)
- 最近android面试问题总结,你会几个?
- android----面试基础概括总结
- 2013 Android面试精华总结
- android面试基础总结
- android 面试总结十条
- android面试基础总结
- 一些常见的Android面试基础题做下总结
- android 面试总结十条
- Android 面试总结
- (20120731)android面试总结(001)
- Android求职之面试总结