本文介绍常用组件里面的三个:活动组件、广播组件和服务组件。
活动组件
活动组件英文名:activity。活动组件是app的基本单元,可暂时将其理解为web端的页面,尤其可视为vue单页面项目的页面,因此有生命周期函数。
Activity生命周期函数主要包括以下几个
-
onCreate():当Activity被创建时调用,通常在这个方法中完成对用户界面的初始化,如调用setContentView()方法加载布局资源等。
-
onStart():当Activity从不可见变为可见状态时调用。
-
onResume():当Activity准备好与用户进行交互时调用,此时Activity位于返回栈的顶部,并接收用户的输入信息。
-
onPause():当系统准备去启动或者恢复另一个Activity时调用,通常用于确认Uncommitted的持久化数据、停止动画等。
-
onStop():当Activity不再可见时调用,可能是因为新的Activity实例被启动,或者是当前Activity实例被销毁。
-
onDestroy():当Activity被销毁前调用,这是Activity的最后一个回调,通常用于做一些清理工作。
-
onRestart():当Activity从停止状态变为运行状态时调用,也就是Activity被重新启动时。
广播组件
在Android开发中,广播接收器(BroadcastReceiver)是一种可以接收和处理来自系统或其他应用发送的广播消息的组件。
首先创建一个广播接收器。创建一个名为MyBroadcastReceiver
的广播接收器,它会在接收到广播时显示一个Toast消息
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Broadcast Received", Toast.LENGTH_SHORT).show();
}
}
MyBroadcastReceiver
继承BroadcastReceiver
,然后在AndroidManifest.xml文件中注册这个广播接收器
<application
...>
<receiver android:name=".MyBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="com.example.MY_BROADCAST" />
</intent-filter>
</receiver>
...
</application>
最后在Activity中发送一个广播
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent();
intent.setAction("com.example.MY_BROADCAST");
sendBroadcast(intent);
}
}
在这个例子中,当MainActivity
被创建时,它会发送一个名为com.example.MY_BROADCAST
的广播。然后,MyBroadcastReceiver
会接收到这个广播,并显示一个Toast消息。
广播还可以在activity创建过程中注册
package com.example.helloa2;
import androidx.appcompat.app.AppCompatActivity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private MyBroadcastReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
// `super.onCreate(savedInstanceState);` 这句代码是在Android中调用父类(通常是AppCompatActivity或者Activity)的onCreate()方法。
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
receiver = new MyBroadcastReceiver();
IntentFilter filter = new IntentFilter("com.example.MY_BROADCAST");
registerReceiver(receiver, filter);
Button button1 = findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("Lifecycle", "onStart222 executed");
Intent intent = new Intent();
intent.setAction("com.example.MY_BROADCAST");
intent.putExtra("message", "Hello, BroadcastReceiver!");
sendBroadcast(intent);
}
});
}
}
上面这段测试通过。
服务组件
在Android系统中,服务(Service)是一种可以在后台执行长期运行操作的应用程序组件,而且它不提供用户界面。服务可以在应用的其他组件(如活动、广播接收器等)被销毁后继续在后台运行,这使得服务特别适合处理那些需要持续运行或定期运行的任务,例如检查新的邮件、播放音乐、执行文件下载等。
服务的本质是一个可以在后台执行任务的组件,它的生命周期与启动它的组件(通常是一个Activity)的生命周期是独立的。这意味着即使用户退出了启动服务的Activity,服务仍然可以在后台继续运行。
服务在Android系统中有两种类型:启动服务(Started Service)和绑定服务(Bound Service)。启动服务是由其他组件(如Activity)通过调用startService()方法启动的,一旦启动,服务可以在后台无限期运行,即使启动它的组件被销毁了。绑定服务是由其他组件(如Activity)通过调用bindService()方法绑定的,绑定服务允许其他组件与服务进行交互,例如获取服务的状态、调用服务的公共方法等。
总的来说,服务的本质是一个在后台执行任务的应用程序组件,它可以在没有用户交互的情况下在后台执行长期运行的任务。
首先创建一个名为MyService
的服务,它会在后台打印日志
public class MyService extends Service {
private static final String TAG = "MyService";
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "Service Started");
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "Service Destroyed");
}
}
然后需要在AndroidManifest.xml文件中注册这个服务
<application
...>
<service android:name=".MyService" />
...
</application>
最后在Activity中启动和停止这个服务
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(this, MyService.class);
startService(intent);
}
@Override
protected void onDestroy() {
super.onDestroy();
Intent intent = new Intent(this, MyService.class);
stopService(intent);
}
}
在例子中,当MainActivity
被创建时,它会启动MyService
服务。当MainActivity
被销毁时,它会停止MyService
服务。MyService
服务在运行时会在后台打印日志。
总结
开工大吉!
- activity就是web里面页面,更接近vue当中路由概念
- BroadcastReceiver广播是一个组件,类似websocket,例如,当电池电量低时,系统会发送一个广播,所有注册了这个广播的应用程序都可以接收到这个信息,并做出相应的处理,如保存数据、提示用户等。
- 服务是在后台运行的组件,它可以在用户不与应用程序交互的情况下执行长时间运行的操作,或者为其他应用程序提供功能。例如,一个音乐播放应用可能会使用一个服务来播放音乐,即使用户退出了应用的主界面,音乐仍然可以继续播放。
网友评论