Android在BroadcastReceiver中通过接口回调更新界面

    xiaoxiao2021-03-25  28

    之前写广播接收器都是写在Activity的内部的,觉得看起来很乱的感觉,毕竟广播也事和活动是同一级别的组件之一,哪儿能放在活动的里面啊,决定就来封装一下,发现居然没有思路,,同事说用静态类,直接点就可以了,

    但是静态类在内存中不会被回收,只有等程序结束后才会回收,所以决定用接口回调 接口回调在安卓中用的很多吧,这个不懂的可以自行搜索一下哈,就不普及基础了, 新建一个接口UpdateUIListenner.class public interface UpdateUIListenner { /** * 更新UI */ void UpdateUI(String str); } 12345678 新建一个BroadcastReceiver取名 MyReceiver public class MyReceiver extends BroadcastReceiver { UpdateUIListenner updateUIListenner; @Override public void onReceive(Context context, Intent intent) { String key = intent.getStringExtra("key"); updateUIListenner.UpdateUI(key); } /** * 监听广播接收器的接收到的数据 * @param updateUIListenner */ public void SetOnUpdateUIListenner(UpdateUIListenner updateUIListenner) { this.updateUIListenner = updateUIListenner; } } 1234567891011121314151617181920 在MainActivity里面 public class MainActivity extends AppCompatActivity { MyReceiver myReceiver; TextView tv1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn = (Button) findViewById(R.id.btnSend); tv1 = (TextView) findViewById(R.id.tv); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //发送广播 Intent intent = new Intent(); intent.putExtra("key", "数据数据"); intent.setAction("gengxin"); sendBroadcast(intent); Log.e("+++++","发送广播"); } }); //注册广播 ------接口回调不能使用静态注册,只能动态注册 myReceiver = new MyReceiver(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("gengxin"); registerReceiver(myReceiver, intentFilter); myReceiver.SetOnUpdateUIListenner(new UpdateUIListenner() { @Override public void UpdateUI(String str) { tv1.setText(str); } }); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(myReceiver); } 123456789101112131415161718192021222324252627282930313233343536373839404142

    源码下载(Android Studio)

    转载请注明原文地址: https://ju.6miu.com/read-114215.html

    最新回复(0)