关闭

Android四大组件易考题分析

标签: android
542人阅读 评论(0) 收藏 举报

题型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()。



 


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:315732次
    • 积分:3888
    • 等级:
    • 排名:第8179名
    • 原创:129篇
    • 转载:0篇
    • 译文:1篇
    • 评论:153条
    最新评论