题型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>
答:
同一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; } }
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()。