SORU
16 EKİM 2010, CUMARTESİ


Android NSNotificationCenter eşdeğer

Üzerinde bir iPhone uygulaması android için taşıma işlemi, uygulama içinde iletişim kurmak için en iyi yol arıyorum. Niyet gitmek için yol gibi görünüyor, bu (sadece) en iyi seçenektir? NSUserDefaults Niyet hem performans hem de kodlama daha hafif görünüyor.

Aynı zamanda devlet için bir uygulama alt ben eklemek gerekir, ama başka bir aktivite bir olayın farkına varması gerekiyor.

CEVAP
16 Ocak 2012, PAZARTESİ


Bulduğum en iyi eşdeğer Android Support Package bir parçası olan LocalBroadcastManager.

LocalBroadcastManager belgeler:

Yardımcısı KAYIT OLmaya ve yerel nesneler için Niyet yayınları gönderme süreci içinde. Bu sendBroadcast(Niyet) ile küresel yayınları Gönderen: avantaj var

  • Yayın verileri app bırakmayacak biliyorsun, o yüzden özel veri sızıntısı hakkında endişelenmenize gerek yoktur.
  • Diğer uygulamalar uygulamanıza bu yayınlar göndermek mümkün değil, güvenlik açığı ve onlar konusunda endişelenmenize gerek yok.
  • Sistem aracılığıyla genel bir yayın göndermekten daha verimli olur.

Bu kullanırken, Intent NSNotification bir eşdeğer olduğunu söyleyebiliriz. İşte bir örnek:

ReceiverActivity.java

Olay bildirimleri için saatler bir aktivite "custom-event-name" adında.

@Override
public void onCreate(Bundle savedInstanceState) {

  ...

  // Register to receive messages.
  // This is just like [[NSNotificationCenter defaultCenter] addObserver:...]
  // We are registering an observer (mMessageReceiver) to receive Intents
  // with actions named "custom-event-name".
  LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
      new IntentFilter("custom-event-name"));
}

// Our handler for received Intents. This will be called whenever an Intent
// with an action named "custom-event-name" is broadcasted.
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
  @Override
  public void onReceive(Context context, Intent intent) {
    // Get extra data included in the Intent
    String message = intent.getStringExtra("message");
    Log.d("receiver", "Got message: "   message);
  }
};

@Override
protected void onDestroy() {
  // Unregister since the activity is about to be closed.
  // This is somewhat like [[NSNotificationCenter defaultCenter] removeObserver:name:object:] 
  LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
  super.onDestroy();
}

SenderActivity.java

/Yayınları gönderdiği ikinci etkinlik bildirimleri.

@Override
public void onCreate(Bundle savedInstanceState) {

  ...

  // Every time a button is clicked, we want to broadcast a notification.
  findViewById(R.id.button_send).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
      sendMessage();
    }
  });
}

// Send an Intent with an action named "custom-event-name". The Intent sent should 
// be received by the ReceiverActivity.
private void sendMessage() {
  Log.d("sender", "Broadcasting message");
  Intent intent = new Intent("custom-event-name");
  // You can also include some extra data.
  intent.putExtra("message", "This is my message!");
  LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}

Her zaman düğmesi R.id.button_send tıklandığında yukarıdaki kod ile, bir Niyet yayınlanır ve ReceiverActivity 9 *tarafından alındı.

Hata ayıklama çıkışı, bu gibi görünmelidir:

01-16 10:35:42.413: D/sender(356): Broadcasting message
01-16 10:35:42.421: D/receiver(356): Got message: This is my message! 

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Chip Johnson

    Chip Johnson

    30 AĞUSTOS 2007
  • paulandstorm

    paulandstorm

    4 EYLÜL 2006
  • Peyton

    Peyton

    28 Aralık 2008