您的位置:首页 > 移动开发 > Android开发

Android四大组件易考题分析

2015-11-20 11:41 281 查看
题型1:请列出Android四大组件:

答:Activity,Service,BroadcastReceiver,Provider

题型2:请描述下Activity的生命周期

答:7个生命周期 onCreate-onStart-onResume-onPause-onRestart-onStop-onDestroy;

解析:



题型3:Android常用的五种布局?

答:流布局,帧布局,相对布局,表格布局,绝对布局

分析:四大布局就去掉绝对布局

题型4:注册广播的几种方式,有何优缺点?

答:1)第一种不是常驻型广播,也就是说广播跟随activity的生命周期。注意: 在activity结束前,移除广播接收器。(代码动态注册)

//生成广播接受者类的实例
<pre name="code" class="java">SmsBroadCastReceiver smsBroadCastReceiver = new SmsBroadCastReceiver();
//实例化过滤器并设置要过滤的广播
IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");

//注册广播   (Activity的方法)
registerReceiver(smsBroadCastReceiver, intentFilter);




2)第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。(在AndroidManifest中注册)

<!--广播注册-->
<receiver android:name=".SmsBroadCastReceiver">
<intent-filter android:priority="20">
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>


题型5:Andorid引入广播机制的用意

答:

同一app内部的同一组件内的消息通信(单个或多个线程之间);

同一app内部的不同组件之间的消息通信(单个进程);

同一app具有多个进程的不同组件之间的消息通信;

不同app之间的组件之间消息通信;

Android系统在特定情况下与App之间的消息通信。

从实现原理看上,Android中的广播使用了观察者模式,基于消息的发布/订阅事件模型。因此,从实现的角度来看,Android中的广播将广播的发送者和接受者极大程度上解耦,使得系统能够方便集成,更易扩展。

题型6:什么是Service以及描述一下它的生命周期

答:Service(服务)是一个没有用户界面的在后台运行执行耗时操作的应用组件。其他应用组件能够启动Service,并且当用户切换到另外的应用场景,Service将持续在后台运行。 Service有两种状态,“启动的”和“绑定”。

onCreate-onStartCommand-(onBind-onRebind-onUnbind-onRebind)-onDestroy

解析:



1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。

2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。

3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。

4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。

5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。

6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。

7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。

题型7:Activity怎么和Service绑定

首先,在Activity端,首先写个类继承ServiceConnection,用它来获取service实例,然后生成一个intent里面放activity的class和service的class,然后用bindService方法进行绑定;

<span>
 <span class="keyword">private</span><span> Service1 myservice = </span><span class="keyword">null</span><span>;</span><span class="comment">//被绑定的service对象</span><span> 
</span></span>
//先生成一个内部类,用于获取service实例
 public ServiceConnection conn= new ServiceConnection() {  
         
            @Override  
            public void onServiceDisconnected(ComponentName name) {  
                myservice = null;  
            }  
              
            @Override  
            public void onServiceConnected(ComponentName name, IBinder service) {  
                myservice = ((Service1.MyBinder)service).getService();  
                 
            }  
        };

//开始绑定
Intent intent = new Intent(Activity1.this,Service1.class);
bindService(intent, conn, Context.BIND_AUTO_CREATE);


在Service端,首先写个类继承iBinder,里面必须些getService方法,把本service返回,然后在onBind方法里吧这个自定义类返回

private final IBinder binder = new MyBinder();

@Override
public IBinder onBind(Intent intent) {

return binder;
}
/**
* 该类是获得Service对象
* @author Administrator
*
*/
public class MyBinder extends Binder{
public Service1 getService(){
return Service1.this;
}
}


题型8:如何启动service

1. 在同一个应用任何地方调用 startService() 方法就能启动 Service 了,然后系统会回调 Service 类的 onCreate() 以及 onStart() 方法。这样启动的 Service 会一直运行在后台,直到 Context.stopService() 或者 selfStop() 方法被调用。另外如果一个 Service 已经被启动,其他代码再试图调用 startService()
方法,是不会执行 onCreate() 的,但会重新执行一次 onStart() 。

2. 另外一种 bindService() 方法的意思是,把这个 Service 和调用 Service 的客户类绑起来,如果调用这个客户类被销毁,Service 也会被销毁。用这个方法的一个好处是,bindService() 方法执行后 Service 会回调上边提到的 onBind() 方发,你可以从这里返回一个实现了 IBind 接口的类,在客户端操作这个类就能和这个服务通信了,比如得到 Service 运行的状态或其他操作。如果 Service
还没有运行,使用这个方法启动 Service 就会 onCreate() 方法而不会调用 onStart()。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: