Использование AsyncTask для вызова другого приложения - PullRequest
0 голосов
/ 28 июня 2011

Я хочу использовать AsyncTask для вызова другого приложения.У меня есть главное приложение, которое делает свое дело, но когда я его запускаю, оно выполняет AsyncTask для вызова приложения «messages», которое проверяет наличие непрочитанных сообщений, а затем отображает уведомление в строке состояния.

Однако, когда я вызвал execute (), приложение сообщений переходит на передний план, и мне приходится нажимать кнопку «Назад», чтобы перейти к моему основному приложению.

Код выглядит следующим образом (мой основнойприложение)

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    MessageUpdate update = new MessageUpdate(this);
    System.out.println("Calling Update");
    update.execute(null);
....

Мой AsyncTask:

public class MessageUpdate extends AsyncTask{

    Context ctx;
    public MessageUpdate(Context ctx){
        this.ctx = ctx;
    }

    @Override
    protected Object doInBackground(Object... params) {
        Intent notificationIntent = new Intent();
        notificationIntent.setClassName("com.test.messages", "com.test.messages.MessageCheck");
        ctx.startActivity(notificationIntent);
        return null;
    }
}

Может кто-нибудь сказать мне, почему MessagesCheck переходит на фронт и как его остановить?Или если то, что я делаю, возможно?

Ответы [ 3 ]

1 голос
/ 28 июня 2011

Как уже отмечали другие, сервис - это путь.Однако, если вы используете bindService () , служба будет работать только до тех пор, пока она ограничена.

Просто для выяснения некоторых проблем:

  • Использование startActivity взаимодействовать с фоновой задачей совсем не то, что вам нужно, поскольку Activity - это компонент пользовательского интерфейса, который при активации выходит на передний план.
  • Предполагается, что вы добавите service к вашему приложению «сообщения», не основное приложение.
  • Затем вы можете связаться с приложением «сообщения» из основного приложения, связавшись с сервисом.Если вы сделаете это (используя bindService), служба не будет работать бесконечно.
  • Подробная информация о том, как это сделать, здесь .

Вы можете сделатьвсе это без AsyncTask, однако это может помочь избежать блокировки потока пользовательского интерфейса , если службе требуется значительное время для выполнения своей работы.Кроме того, ваша служба может использовать собственный фоновый поток для проверки сообщений и публикации уведомления.

0 голосов
/ 28 июня 2011

Вы запускаете Activity в своей ASyncTask, поэтому ваша текущая активность переносится обратно.

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

0 голосов
/ 28 июня 2011

Рассматривали ли вы make com.test.messages.MessageCheck Сервис, а не Активность, затем вызываете startService (...)

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