android常见的面试题

1.  请介绍一下Android四大组件?
1、activity
(1)一个Activity通常就是一个单独的屏幕(窗口)。
(2)Activity之间通过Intent进行通信。
(3)android应用中每一个Activity都必须要在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity。
2、service
(1)service用于在后台完成用户指定的操作。service分为两种:
(a)started(启动):当应用程序组件(如activity)调用startService()方法启动服务时,服务处于started状态。
(b)bound(绑定):当应用程序组件调用bindService()方法绑定到服务时,服务处于bound状态。
(2)startService()与bindService()区别:
(a)started service(启动服务)是由其他组件调用startService()方法启动的,这导致服务的onStartCommand()方法被调用。
当服务是started状态时,其生命周期与启动它的组件无关,并且可以在后台无限期运行,即使启动服务的组件已经被销毁。因此,服务需要在完成任务后调用stopSelf()方法停止,或者由其他组件调用stopService()方法停止。
(b)使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止
(3)需要在应用程序配置文件中声明全部的service,使用<service></service>标签。
(4)Service通常位于后台运行,它一般不需要与用户交互,因此Service组件没有图形用户界面。Service组件需要继承Service基类。Service组件通常用于为其他组件提供后台服务或监控其他组件的运行状态。
3、content provider
(1)使一个应用程序的指定数据集提供给其他应用程序。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。
(2)只有需要在多个应用程序间共享数据是才需要内容提供者。
(3)ContentProvider实现数据共享。ContentProvider用于保存和获取数据,并使其对所有应用程序可见。这是不同应用程序间共享数据的唯一方式,因为android没有提供所有应用共同访问的公共存储区。
(4)通过ContentResolver对象实现对ContentProvider的操作。
4、broadcast receiver
(1)广播接收器没有用户界面。它们可以启动一个activity或serice来响应它们收到的信息,或者用NotificationManager来通知用户。例如闪动背灯、震动、播放声音等。
(2)广播接收者的注册有两种方法,分别是程序动态注册和AndroidManifest文件中进行静态注册。
(3)动态注册广播接收器特点是当用来注册的Activity关掉后,广播也就失效了。
静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用。


2.  AsyncTask 使用在哪些场景? 它的缺陷是什么? 如何解决?
    (适用场景)   AsyncTask是一个异步线程,处理短时间的异步任务,适用场景是网络访问完成后更新UI或者一边访问网络一边更新UI
   AsyncTask内部也是Handler机制来完成的,只不过Android提供了执行框架来提供线程池来执行相应的任务,因为线程池的大小问题,所以AsyncTask只应该用      来执行耗时       时间较短的任务,比如Http请求,大规模的下载和数据库的更改不适用于AsyncTask,  (缺点) 因为会导致线程池堵塞,没有线程来执行其他任务,导致的情形会发生  AsyncTask根本执行不了的问题,
  (解决办法):用一个控制线程来处理,如果发现AsyncTask线程池满了,就让AsyncTask休眠,否则继续运行。
3. 同一个程序,但不同的Activity是否可以放在不同的Task任务栈中? 
比方说在激活一个新的activity时候给intent设置flag
Intent的flag添加FLAG_ACTIVITY_NEW_TASK




4.  如何退出Activity? 如何安全退出已调用多个Activity的Application?
1、抛异常退出
该方法通过抛异常,使程序Force Close。
验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出Force Close的窗口。
2、记录打开的Activity
每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。
3、发送特定广播
在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。
4、递归退出
在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。
5、Android里面杀死进程的方式退出System.exit(0);退出
6、Android中finish()方式退出
7、Java里面标准的退出应用程序的方式
8、 两种方式实现多个界面同时退出程序
      a.声明一个父类,父类里面创建一个静态的集合,用集合存储所有的Activity
        在父类里面监听返回键,遍历集合退出每个Activity          
      b.通过特定的广播方式退出
9、 双击返回键退出应用程序 ,当用户按下返回键时设定一个定时器来监控是否2秒内实现了退出,如果用户没有接着按返回键,则清除第一次按返回键的效果,使程序还原到第一次按下返回键之前的状态。定时器是每次用户按下返回键才去创建
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值