Android四大组件分别为activity、service、content provider、broadcast receiver。
1、activity
Activity可以看成是安卓系统的根本,在这个根本上才可以进行其他的工作,因为在安卓系统里运行的所有的程序,它的流程都必须在【Activity】中运行,所有他是最基本的模块。它的作用是一个框架或页面,每个程序会有多个【Activity】组成。
(1)一个Activity通常就是一个单独的屏幕(窗口)。
(2)Activity之间通过Intent进行通信。
(3)android应用中每一个Activity都必须要在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity。
自定义activity活动组件 必须继承 Activity类 并实现onCreate()方法即可
package com.example.helloword;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.EditText;
import androidx.annotation.Nullable;
public class MyActivity extends Activity {
protected static final String TAG="com.czq.MyActivity";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG,">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
Intent intent=getIntent();
String account =intent.getStringExtra("account");
String pwd= intent.getStringExtra("pwd");
EditText pwdText= findViewById(R.id.edit_pwd);
EditText accText=findViewById(R.id.edit_acc);
pwdText.setText(account);
accText.setText(pwd);
}
}
如果要实现activity 组件相互跳转 如以下代码即可
public void but_click(View view){
String accStr=acc.getText().toString();
String pwdStr=pwd.getText().toString();
if(accStr.equals("root")&&pwdStr.equals("root")){
Toast.makeText(getApplication(), "登录成功", Toast.LENGTH_LONG).show();
Intent intent=new Intent(getApplication(),MyActivity.class);
intent.putExtra("account","llq");
intent.putExtra("pwd","12346");
startActivity(intent);
Intent intent2=new Intent(getApplication(),MyActivity.class);
startActivity(intent2); //启动意图实现跳转类
//startService(intent2);
}else{
Toast.makeText(getApplication(), "登录失败", Toast.LENGTH_LONG).show();
}
}
activity生命周期
onCreate() Activity创建时第一个调用的方法,通常我们在该方法中加载布局文件,初始化UI组件,事件注册等等
onStart() 在onCreate方法之后调用,用于显示界面,但当前用户不能进行交互
onResume() 在onStart方法后调用,该方法执行完成后,用户可进行交互,当前Activity进入Resumed状态(运行状态);当一个Paused状态的activity被重新返回时,会再次调用该方法,让Activity进入运行状态
onRestat() 当一个Stopped状态的Activity被返回时,该方法被调用,之后再调用onResume()方法进入运行状态
onPause() 当 其他Activity(透明或窗口模式)进入时,该方法会被调用,让当前Activity进入Paused状态(暂停状态);当前Activity还可见 但不可交互,如果其他更高优先级的app需要内存时,当前Activity可能会被销毁(kill);当前Activity被返回时会调用 onResume()方法
onStop() 当其他Activity完全覆盖该Activity时,该方法被调用,当前 Activity进入Stopped状态(停止状态);当前Activity不可见,如果其他更高优先级的app需要内存时,当前Activity可能会 被销毁(kill);当前Activity被返回时会调用onRestart()方法
onDestroy() 当前Activity被销毁时调用,通常在该方法中用来释放资源,当前Activity killed
————————————————
2、Service
1.service(服务)是安卓中的四大组件之一,它通常用作在后台处理耗时的逻辑,,并且可以和其他组件进行交互。
生命周期
3.启动方式:··startService(启动);··bindService(绑定服务)
4.startService()与bindService()区别:
startService只是启动Service,启动它的组件(如Activity)和Service并没有关联,只有当Service调用stopSelf或者其他组件调用stopService服务才会终止。
bindService方法启动Service,其他组件可以通过回调获取Service的代理对象和Service交互,而这两方也进行了绑定,当启动方销毁时,Service也会自动进行unBind操作,当发现所有绑定都进行了unBind时才会销毁Service。
5.IntentService
内部有一个工作线程来完成耗时的操作,只需实现onHandleIntent方法即可
完成工作后会自动终止服务
如果同时执行多个任务时,会以工作队列的方式,一次执行
通过该类来完成本APP中耗时的工作
————————————————
如实现Servcer 如下代码:必须继承 Service 服务类 实现onCreate()方法
package com.example.helloword;
import android.annotation.SuppressLint;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
import androidx.annotation.Nullable;
public class MyService extends Service {
public static final String TAG="com.example.helloword.MyService";
@SuppressLint("LongLogTag")
@Override
public void onCreate() {
Log.d(TAG,">>>>>>>>>>>>>>>>>>onCreate>>>>>>>>>>>>>>>>");
super.onCreate();
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
如实现跳转
public void but_click(View view){
String accStr=acc.getText().toString();
String pwdStr=pwd.getText().toString();
if(accStr.equals("root")&&pwdStr.equals("root")){
Toast.makeText(getApplication(), "登录成功", Toast.LENGTH_LONG).show();
Intent intent=new Intent(getApplication(),MyActivity.class);
intent.putExtra("account","llq");
intent.putExtra("pwd","12346");
startActivity(intent);
Intent intent2=new Intent(getApplication(),MyService.class);
startService(intent2); //启动意图来实现 对应的Service
}else{
Toast.makeText(getApplication(), "登录失败", Toast.LENGTH_LONG).show();
}
}
3、Broadcast Receive (广播)
1.BroadcastReceiver也就是"广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。在Android系统中, 广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能:当网络状态改变时系统会产生一条广播,接收到这条 广播就能及时地做出提示和保存数据等操作;当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度,等等。
2.广播接收器的类型
Normal broadcasts:默认广播
Ordered broadcasts:有序广播
Sticky broadcasts:粘性广播
3.注册广播接收器的两种方式
静态注册:静态注册是在AndroidManifest.xml配置文件中注册
动态注册:需要在代码中动态指定广播地址并注册,通常我们是在Activity或Service注册一个广播。
4.区别:
动态注册广播接收器特点是当用来注册的Activity关掉后,广播也就失效了。
静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用。
4、ContentProvider
android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。
只有需要在多个应用程序间共享数据是才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处是统一数据访问方式。
ContentProvider实现数据共享。ContentProvider用于保存和获取数据,并使其对所有应用程序可见。这是不同应用程序间共享数据的唯一方式,因为android没有提供所有应用共同访问的公共存储区。
开发人员不会直接使用ContentProvider类的对象,大多数是通过ContentResolver对象实现对ContentProvider的操作。
ContentProvider使用URI来唯一标识其数据集,这里的URI以content://作为前缀,表示该数据由ContentProvider来管理。
5、总结
Activity:是整个应用程序的门面,主要负责应用程序当中数据的展示,是各种各样控件的容器,是用户和应用程序之间交互的接口
Service:在前台不可见,但是承担大部分数据处理工作,它和Activity的地位是并列的,区别在于Activity运行于前台,Service运行于后台,没有图形用户界面,通常他为其他的组件提供后台服务或监控其他组件的运行状态
BroadcastReceiver:实现消息的异步接收,他非常类似事件编程中的监听器,但他与普通事件监听器有所不同,普通的事件监听器监听的事件源是程序中的控件,而BroadcastReceiver监听的事件源是Android应用中其他的组件
ContentProvider:为不同的应用程序之间数据访问提供统一的访问接口,通常它与ContentResolver结合使用,一个是应用程序使用ContentProvider来暴露自己的数据,而另外一个是应用程序通过ContentResolver来访问数据