Как получить доступ к объектам вида Activity во время работы фоновой службы, которая обновляет представление - PullRequest
0 голосов
/ 27 апреля 2019

У меня есть приложение для Android, в котором есть служба подключения к Интернету. Сервис показывает снэк-бар всякий раз, когда приложение подключается к сети или отключается. Службы работают нормально, однако при доступе к снэк-бару MainActivity или относительной компоновке, на которой я буду показывать снэк-бар, я получаю нулевые значения. Ниже приведена реализация обратного вызова из фоновой службы, этот метод записан внутри mainacctivity:

  public void hasInternetConnection() {
    if (!hasInternetMessageShown) {
        showSnackBar("App is online", false);
    }      
}
private void showSnackBar(String message, boolean shouldStick) {
    if (snack != null && snack.isShown()) {
        snack.dismiss();
    }
    snack = Snackbar.make(rootView, message, Snackbar.LENGTH_SHORT);
    snack.getView().setBackgroundColor(activity.getResources().getColor(R.color.blue_light));
    TextView textView = snack.getView().findViewById(android.support.design.R.id.snackbar_text);
    textView.setTextColor(activity.getResources().getColor(R.color.orange));
    Typeface typeface = ResourcesCompat.getFont(activity, R.font.semibold);
    textView.setTypeface(typeface, Typeface.NORMAL);
    if (shouldStick)
        snack.setDuration(BaseTransientBottomBar.LENGTH_INDEFINITE);
    snack.show();
}

Приведенный выше код работает только в том случае, если я сохраняю экземпляр закуски и активности статичными. Что я не хочу делать, так как это приведет к утечке памяти. Пожалуйста, помогите мне здесь, чтобы я мог справиться с этим эффективно.

Спасибо !!

Ответы [ 2 ]

2 голосов
/ 27 апреля 2019
public class UpdaterApplication extends Application {
  public void onCreate() {
    super.onCreate();
    Thread thread = new Thread(new Runnable() {
      @Override
      public void run() {
        loadDataFromServer();
      }});
    thread.start();
  }

  private void loadDataFromServer() {
    // ...
    // load data from server
    // this could take some time
    // ...

    // How do we update the current activity?

  }
}

Обратите внимание, что мы должны включить строку

android:name="UpdaterApplication"
2 голосов
/ 27 апреля 2019

Пожалуйста, попробуйте отправить локальную трансляцию об активности с вашего сервиса, а затем попробуйте обновить вашу закусочную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...