Android中的应用程序组件有哪些
创始人
2024-12-28 19:03:48
0次

1、Activity

Activty是一种展示型组件,Activity为用户提供了一个可视的用户界面。例如,一个拨打电话程序可能有一个Activity用来显示可以拨打电话的联系人,第二个Activity用来新建联系人写信息,其他的Activity用来查看具体的联系人,或者更改联系人信息,虽然应用程序中的各个Activity所提供的用户界面聚合性很强,但是每个Activity都独立于其他的Activity,每一个实例化的Activity都是Activity的子类,Intent可触发了Activity的启动,Intent可分为显式Intent触发和隐式Intent触发;显式Intent触发可明确的指向Activity组件,用如下代码表示:

 Intent in = new Intent(this,SecondActivity.class)
 MainActivity.this.startActivity(in)

隐式Intent触发是指向一个或者2个以上的Activity的目标组件,它也可以没有目标Activity,它的隐式触发用如下代码表示:

Intent intent = new Intent();
intent.setPackage("com.xe.launchmode");
intent.setAction("com.xe.actoin.MAP");
intent.addCategory("android.intent.category.APP_MAPS");
MainActivity.this.startActivity(intent);

2、Service

Service是一种后台处理任务型组件,它一直在后台运行,用于后台处理一系列的计算任务或者处理其他事情的时候播放背景音乐等,每个service都扩展自Service类;Service组件和Activity组件的开启是不同的,Activity只有一种启动状态,用如下代码表示:

Intent in = new Intent(this,SecondActivity.class)
startActivity(in)

而Service的开启却有2种,当处于启动状态时,它可以做一些后台任务,不需要和用户界面交互,它的生命周期和应用程序一样长,多媒体播放器播放音乐是应用Service的一个非常好的例子。多媒体播放器程序可能包含一个或者多个Activity,用户通过这些Activity选择并播放音乐。然而音乐回放并不需要一个Activity来处理,因为用户可能会希望音乐一直播放下去,即使退出了播放器去执行其他应用程序也不停止。为了让音乐一直播放,多媒体播放器Activity可能会启动一个Service在后台播放音乐。Android系统会使音乐回放Service一直运行,即使在启动这个Service的Activity退出之后。它的启动可用如下代码表示:

Intent in = new Intent(this,SecondActivity.class)
MainActivity.this.startService(in)

当它处于绑定状态时,它即可以做一些后台任务,也可以和用户界面做交互,它的生命周期和用户界面一样长,它的绑定可用如下代码表示:

ServiceConnection mBinderPoolConnection = new ServiceConnection() {
  @Override
  public void onServiceConnected(ComponentName name, IBinder service) {
   
  }

  @Override
  public void onServiceDisconnected(ComponentName name) {

  }
 };
 
Intent intent = new Intent(mContext, MyService.class); 
MainActivity.this.bindService(intent,new ServiceConnection(),Context.BIND_AUTO_CREATE);

以上2中开启,不管是哪一种都不可以直接在Service中做耗时操作,因为它是运行在主线程中的,如果非要做耗时操作,应该开一个工作线程给它去执行。

3、BroadcastReceiver

一般不执行任何任务,仅仅是接收并相应广播通知一类的组件。大部分广播通知是由系统产生的,例如改变时区、闹钟提醒、用户选择了一幅图片或者用户改变了语言首选项。应用程序同样也可以发送广播通知,例如通知其他应用程序某些数据已经下载到设备上可以使用;一个应用程序的BroadcastReceiver来响应它的通知,所有的BroadcastReceiver的实现类都扩展自BroadcastReceiver类。BroadcastReceiver适合用于不同的组件以及不同的进程之间进行通信,它是没有用户界面的,是因为它在系统内部工作。下面介绍它的2种注册方式,首先是静态注册,它是在AndroidManifest.xml文件中完成的,安装应用时会被应用解析,不启动应用也能接收广播,用如下监听wifi状态改变的代码表示:


 
   
   
   
  

从以上代码可以发现,接收过程的匹配是通过来描述的,可以总结出广播是一个低耦合的观察者模式这样的结论。
另外一种方式就是动态注册,需要启动应用程序才可以接收到广播,是通过在Java代码中完成注册的,用如下代码表示它的动态注册:

public class MyBroadcastReceiver extends BroadcastReceiver{
  @Override
  public void onReceive(Context context, Intent intent){
   
  }
 }
 
 
 MyBroadcastReceiver receiver = new MyBroadcastReceiver();
 IntentFilter filter=new IntentFilter();
 filter.addAction("com.xe.intent.action.ACTION_1");
 filter.addAction("com.xe.intent.action.ACTION_2");
 SecondActivity.this.registerReceiver(receiver,filter);

发送广播可用如下代码来实现:

Intent intent = new Intent();
intent.setAction("com.xe.intent.action.ACTION_2");
MainActivity.this.sendBroadcast(intent);

以上2种广播的注册方式中广播的接收是不可以做耗时操作的,因为接收广播的方法是在主线程中被调用的。

4、ContentProvider

ContentProvider是一种共享数据型组件,应用程序可以通过ContentProvider来访问其他应用程序的数据,包括其他应用程序的私有数据;和Service一样,它是没有用户界面的,它的内部需要实现insert、update、delete和query方法,它在内部使用一份数据集合并且对数据集合没有要求。ContentProvider是跨进程通信的,当Android系统收到一个需求某个组件进行处理的请求的时候,Android会确保处理此请求的组件的宿主进程是否已经在运行,如果没有,则立即启动这个进程。ContentProvider是提供一个外部接口ContentResolver给其他进程访问数据的,下面一部分代码简单的表示query方法的使用过程:

Uri bookUri = Uri.parse("content://com.zyb.provider/data");
ContentResolver cr = ContentProviderActivity.this.getContentResolver();
Cursor bookCursor = cr.query(bookUri,new String[]{"_id","name"},null,null,null);
while (bookCursor.moveToNext()) {
 int id = bookCursor.getInt(0);
 String name = bookCursor.getString(1);
}

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...