2017年android面试总结

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后这个权限要申请。

          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)你的应用可以使用它对外部事件进行过滤,只对感兴趣的外部事件进行接收

广播接收器没有用户界面。然而,它们可以启动一个activityserice来响应它们收到的信息,或者用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值