美文网首页
安卓在Activity与Service间通讯

安卓在Activity与Service间通讯

作者: 不会弹钢琴de大叔 | 来源:发表于2024-09-24 14:12 被阅读0次

常规情况下,activity与service之间的通讯都是通过intent进行数据传递的

本文讲述通过LocalBroadcastManager实现其通讯。

LocalBroadcastManager 是 Android 提供的用于在应用内部发送广播的工具,它可以有效地在 Activity 和 Service 之间进行通信。使用 LocalBroadcastManager 可以高效地在同一个应用内的不同组件之间通信,且相比于系统广播,它的性能开销更小,并且不会被其他应用接收到。

step 1 添加依赖库

implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'

step 2 创建一个activity 接收广播

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;

public class MyActivity extends AppCompatActivity {

    private BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            // 处理接收到的广播
            String data = intent.getStringExtra("extra_data");
            Toast.makeText(context, data, Toast.LENGTH_SHORT).show();
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 启动 Service
        Intent serviceIntent = new Intent(this, MyService.class);
        startService(serviceIntent);
    }

    @Override
    protected void onStart() {
        super.onStart();
        // 注册广播接收器
        LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver,
                new IntentFilter("MY_ACTION"));
    }

    @Override
    protected void onStop() {
        super.onStop();
        // 注销广播接收器
        LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver);
    }
}

step 3 创建一个service发送广播

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;

public class MyService extends Service {

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // 发送广播
        Intent localIntent = new Intent("MY_ACTION");
        localIntent.putExtra("extra_data", "Hello from Service");
        LocalBroadcastManager.getInstance(this).sendBroadcast(localIntent);
        return START_NOT_STICKY;
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

相关文章

网友评论

      本文标题:安卓在Activity与Service间通讯

      本文链接:https://www.haomeiwen.com/subject/updqrjtx.html