1、安卓基础 4大组件介绍

本文介绍了Android的四大组件:Activity、Service、Broadcast Receiver和Content Provider。Activity是应用程序的基石,用于显示界面和用户交互。Service则在后台执行耗时任务,与Activity独立。Broadcast Receiver用于接收系统和应用的广播,实现异步消息接收。Content Provider则提供数据共享,使得不同应用间能共享数据。各组件的生命周期、启动方式和交互机制也进行了详细阐述。
摘要由CSDN通过智能技术生成

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(服务)是安卓中的四大组件之一,它通常用作在后台处理耗时的逻辑,,并且可以和其他组件进行交互。

  1. 生命周期

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来访问数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值