Android退出程式(下)——利用廣播機制,android機制

來源:互聯網
上載者:User

Android退出程式(下)——利用廣播機制,android機制
概述:

基於上一篇部落格《Android退出程式(上)——單例模式》的學習,我們知道了如何利用單例和迴圈遍曆的方式來退出我們的應用程式。這篇部落格則要從另一個角度來解決問題——廣播。即是,接收到一個關閉Activity的廣播時,就去關閉當前Activity。


類圖展示及說明:


從上面的類圖中可以看到這裡做了一個處理,而這個處理是學習物件導向的Coder要必須掌握的。這裡就是對Activity進行了一個擴充——BaseActivity。如果我們要對每個Activity進行添加內部ExitappReceiver類的話,這樣勢必增加了代碼量,且後期不好維護。所以這裡就是把ExitappReceiver封裝到了一個基礎類中,然後讓其他需要實現關閉activity的Activity來繼承它就好了。


程式碼範例:

這裡只貼出兩個比較關鍵的代碼:

1.接收事件

public class BaseActivity extends Activity {    public static final String TAG = BaseActivity.class.getName();        public static final String BROAD_CAST_MESSAGE = TAG + ".BROAD_CAST_MESSAGE";        private ExitappReceiver mReceiver = null;        @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);                registerReceiver();    }        private void registerReceiver() {        IntentFilter filter = new IntentFilter();          try {              if (mReceiver != null) {                  unregisterReceiver(mReceiver);              }          } catch (Exception e) {              e.printStackTrace();          }                    mReceiver = new ExitappReceiver();          filter.addAction(BROAD_CAST_MESSAGE);          registerReceiver(mReceiver, filter);    }        @Override    protected void onDestroy() {        if (mReceiver != null) {            unregisterReceiver(mReceiver);        }        super.onDestroy();    }        class ExitappReceiver extends BroadcastReceiver {        @Override        public void onReceive(Context context, Intent intent) {            if (intent.getAction().equals(BROAD_CAST_MESSAGE)) {                finish();            }        }    }}

2.觸發事件:

public class TwoActivity extends BaseActivity {    private int getLayoutResID() {        return R.layout.activity_two;    }        @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);                setContentView(getLayoutResID());                Button nextButton = (Button) findViewById(R.id.activity_two_button);        nextButton.setOnClickListener(new OnClickListener() {                        @Override            public void onClick(View v) {                sendBroadcast();            }        });    }        private void sendBroadcast() {        Intent intent = new Intent();        intent.setAction(BaseActivity.BROAD_CAST_MESSAGE);        sendBroadcast(intent);    }}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.