1. 程式人生 > >Android在BroadcastReceiver中通過介面回撥更新介面

Android在BroadcastReceiver中通過介面回撥更新介面

之前寫廣播接收器都是寫在Activity的內部的,覺得看起來很亂的感覺,畢竟廣播也事和活動是同一級別的元件之一,哪兒能放在活動的裡面啊,決定就來封裝一下,發現居然沒有思路,,同事說用靜態類,直接點就可以了,

但是靜態類在記憶體中不會被回收,只有等程式結束後才會回收,所以決定用介面回撥

介面回撥在安卓中用的很多吧,這個不懂的可以自行搜尋一下哈,就不普及基礎了,
  1. 新建一個介面UpdateUIListenner.class
public interface UpdateUIListenner {

    /**
     * 更新UI
     */
    void UpdateUI(String str);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  1. 新建一個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; } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  1. 在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); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42