title: Where to register a ContentObserver which must run indefinitely?
body: <p>Here is how I am registering a ContentObserver to listen to sent sms:</p>
  
  <pre><code>SendSmsObserver smsObeserver = (new SendSmsObserver(new Handler(), context));
  ContentResolver contentResolver = context.getContentResolver();
  contentResolver.registerContentObserver(Uri.parse("content://sms"), true, smsObeserver);
  </code></pre>
  
  <p>This is the SendSmsObserver class:</p>
  
  <pre><code>class SendSmsObserver extends ContentObserver {
  
  private Context context;
  
  SendSmsObserver(Handler handler, Context context) {
      super(handler);
      this.context = context;
  }
  
  @Override
  public void onChange(boolean selfChange) {
      super.onChange(selfChange);
      queryLastSentSMS();
  }
  </code></pre>
  
  <p>Now the question is that where should I put the top three lines of code? Currently I am writing it in the Activity's OnCreate method. But by doing this I am calling it every time the app is launched. I don't know if it is bad practice or not.</p>
  
  <p>My requirement is that I should listen for sent sms outside my Activity lifecycle. This is working as expected, but should I always register it in the OnCreate method? Also I want to put the same lines in the onReceive() of a BroadcastReceiver to ensure that I am listening after rebooting the device.</p>
  
  <p>UPDATE: BroadcastReceiver is somehow not registering the ContentObserver. I also tried to use getApplicationContext() as a context in BroadcastReceiver but to no avail.</p>