Android中称为四大组件的为别为:Activity/Service/BroadCast Recevicer/Content provider。下面就各解释一下。
Android中称为四大组件的为别为:Activity/Service/BroadCast Recevicer/Content provider。下面就各解释一下。
activity 显示界面
service 服务
Broadcast Receiver 广播
Content Provider 数据通信
Activity:activity是用户和应用程序交互的窗口,一个activity相当于我们实际中的一个网页,当打开一个屏幕时,之前的那一个屏幕会被置为暂停状态,并且压入历史堆栈中,用户可以通过回退操作返回到以前打开过的屏幕。activity的生命周期:即“产生、运行、销毁”,但是这其中会调用许多方法onCreate(创建) 、onStart(激活) 、onResume(恢复) 、onPause(暂停) 、onStop(停止) 、onDestroy(销毁) 、onRestart(重启)。
Activity有四种启动模式 standard,singleTop,singleTask,singleInstance,这四种模式我们可以在清单文件的<Activity节点下通过android:launchMode来进行配置
Service:Service是一种程序,它可以运行很长的时间,相当于后台的一个服务,通过startService(Intent service)可以启动一个Service,通过Context.bindService()可以绑定一个Service。
Service分为两种,一种是Service(这一种是运行在主线程中的,如果要执行耗时操作,可在service中创建一个异步来执行),一种是IntentService(这是一种异步服务,是继承于Service的子类),所以推荐当要执行耗时操作时使用IntentService,如果不耗时,我们可以使用Service
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class MyService extends Service {
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
}
<service
android:name=".MyService"
android:enabled="true"
android:exported="true"></service>
Intent intent = new Intent(this, MyService.class);
startService(intent);
stopService(intent);
特点: 通过start方法启动的service一旦服务开启就跟调用者(开启者)没有任何关系了。开启者退出了,开启者挂了,服务还在后台长期的运行,开启者不能调用服务里面的方法。
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class MyService extends Service {
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
}
<service
android:name=".MyService"
android:enabled="true"
android:exported="true"></service>
Intent intent = new Intent(this, MyService.class);
bindService(Intent,ServiceConnection,int);
unbindService(ServiceConnection);
特点:使用bind方法启动的服务,则调用者挂了,服务也挂了,调用者可以调用服务中的方法
调用者与Service不在同一个进程,这是一种跨进程通信的方式Android绑定远程服务
步骤:
这个Service在上面也说过,是一个异步服务
IntentService特征:
广播分为两种,一种是普通广播,或者称为无序广播,另一种是有序广播
无序广播是完全异步的,在同一时刻在逻辑上是能够被所有的接收者接收到的,传递的效率高,缺点是接收者不能处理结果传给下个接收者,并且无法终止广播的传播(其实有序广播就是和这个相反的,有顺序的传播,两个广播的定义就是完全相反的,这个比较好记)
Context.sendBroadcast()
发送的是普通广播,所有订阅者都有机会获得并进行处理。
广播的生命周期就是在处理完onReceive时,系统将认定他不是一个活动的对象了,就是杀掉他,由于广播的生命周期很短,所以不建议在onReceive中执行一些耗时操作
创建一个广播的步骤:
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("fuck","intent-action : " + intent.getAction());
if(intent.getAction().equals("test")){
Toast.makeText(context,"fuck",Toast.LENGTH_LONG).show();
}
}
}
//广播接收器
<receiver android:name=".broadcast.MyBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
<action android:name="test"/>//这里自定义一个广播动作
</intent-filter>
</receiver>
或者动态注册
registerReceiver(new MyBroadcastReceiver(),new IntentFilter("test"));
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
Intent intent = new Intent("test");
sendBroadcast(intent);
动态注册广播不是常驻型广播,也就是说广播跟随activity的生命周期。注意: 在activity结束前,移除广播接收器。
静态注册是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。
BroadCast Recevicer:接受一种或者多种Intent作触发事件,接受相关消息,做一些简单处理,转换成一条Notification,统一了Android的事件广播模型。可以使用BroadcastReceiver来让应用对外一个外部的事件作出响应。Broadcast Receiver通过NotificationManager来通知用户这些事情发生了,BroadcastReceiver注册的有两种方式,一种是可以在AndroidManifest.xml中注册,另一种可以在运行时的代码中使用Context.registerReceiver()进行注册。用户还可以通过Context.sendBroadcast()将他们自己的intent broadcasts广播给其他的应用程序。
Content provider:内容提供者,可通过它来共享自己的数据给外部调用,给第三方应用提供数据访问的接口。
contentprovider是android四大组件之一的内容提供器,它主要的作用就是将程序的内部的数据和外部进行共享,为数据提供外部访问接口,被访问的数据主要以数据库的形式存在,而且还可以选择共享哪一部分的数据。这样一来,对于程序当中的隐私数据可以不共享,从而更加安全。contentprovider是android中一种跨程序共享数据的重要组件。
原文:https://www.cnblogs.com/123blog/p/12589679.html