Tôi có nhu cầu tạo bộ thu phát quảng cáo tùy chỉnh trong sự kiện onCreate của hoạt động và rõ ràng là tôi cần hủy đăng ký bộ thu phát sóng trong sự kiện onDestroy của hoạt độngAndroid - Khi nào cần đăng ký/Hủy đăng ký người nhận phát sóng được tạo trong một hoạt động?
Để rõ ràng đây là đoạn mã tôi sử dụng
public class AnActivity extends Activity {
private ResponseReceiver receiver;
public class ResponseReceiver extends BroadcastReceiver {
public static final String ACTION_RESP =
"mypackagename.intent.action.MESSAGE_PROCESSED";
@Override
public void onReceive(Context context, Intent intent) {
// TODO Start a dialogue if message indicates successfully posted to server
}
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
IntentFilter filter = new IntentFilter(ResponseReceiver.ACTION_RESP);
filter.addCategory(Intent.CATEGORY_DEFAULT);
receiver = new ResponseReceiver();
registerReceiver(receiver, filter);
}
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
Tôi đã đọc rằng các sự kiện onPause/onResume và onStart/onStop cho hoạt động cũng phải đăng ký và hủy đăng ký bộ thu phát sóng.
Tôi thực sự muốn hiểu những gì được coi là thực tiễn tốt nhất cho điều này và tại sao.
Bạn có đề xuất rằng tôi đăng ký trong onResume INSTEAD của onCreate hoặc cũng như không? OnResume có được gọi khi hoạt động được tạo không? – jamesc
Bạn nên đăng ký onResume yes, onResume() luôn được gọi trên hoạt động đang được hiển thị (đó là phương thức cuối cùng được gọi trước khi hoạt động của bạn xuất hiện (http://developer.android.com/reference/android/app/Activity.html) nếu bạn chỉ đăng ký onCreate() và unregister onPause(), thì lần sau hoạt động được đưa tới foreground, onCreate() sẽ không được gọi lại và sau đó nó sẽ không đăng ký lại người nhận. không làm điều đó onCreate() – SnowyTracks
@SnowyTracks: bạn có thể bình luận về lý do tại sao nó thích hợp hơn để thực hiện các cuộc gọi đăng ký BroadcastReceiver trong onResume/onPause thay vì onStart/onStop? Xem qua hướng dẫn dành cho nhà phát triển cho các dịch vụ bị ràng buộc, tôi thấy [this] (http : //developer.android.com/guide/components/bound-services.html#Binding) Ở phần cuối của phần này, bạn nên thực hiện ràng buộc/đóng gói dịch vụ trong onStart/onStop thay vì onResume/onPause (để thực hiện lý do). tự hỏi nếu điều này cũng áp dụng cho BroadcastReceivers? Cảm ơn trước. –