Что происходит, когда происходит сбой активности?

У меня есть сервис, созданный так:

<service
    android:name="com.myFirebaseMessagingService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>

Затем я реализую onBind как это:

  private final IBinder mBinder = new LocalBinder();
  private myListener mListener;


  public class LocalBinder extends Binder {
    LocalService getService() {
      return LocalService.this;
    }
  }

  public void setListener(myListener listener) {
    mListener = listener;
  }    

  @Override
  public IBinder onBind(Intent intent) {
    return mBinder;
  } 

  @Override
  public void onMessageReceived(RemoteMessage remoteMessage) {
    if (mListener != null) mListener.onMessageReceived(remoteMessage);  
  }

Это довольно просто: Activity привязывается к Сервису и настраивает слушателя. Когда служба получает сообщение, она просто запускает слушателя

Теперь большой вопрос: что произойдет, если активность внезапно рухнет? В таком случае mListener укажет на что-то несуществующее, нет?

Как перед звонком mListener.onMessageReceived(remoteMessage)Могу ли я проверить, жива ли связанная Деятельность?

1 ответ

Решение

Вы можете использовать WeakReference и DeadObjectException, так как ваш Activity похоже в другом приложении. Это позволит вам узнать, если Activity был мусор, потому что ваша ссылка станет null и ты не протечешь.

private WeakReference<MyListener> mListener;

Вот как вы храните WeakReference,

public void setListener(MyListener listener) 
{
   mListener = new WeakReference<MyListener>(listener);
}  

Вот как вы это используете.

@Override
public void onMessageReceived(RemoteMessage remoteMessage) 
{
    MyListener listener = mListener.get();

    if(listener != null)
    {
        try
        {
            listener.onMessageReceived(remoteMessage);  
        }
        catch(DeadObjectException exception)
        {

        }
    }
    else
    {
        // Activity was destroyed.
    }
}
Другие вопросы по тегам