使用AsyncTask调用另一个应用程序

时间:2011-06-28 12:24:17

标签: android android-asynctask

我想使用AsyncTask来调用另一个应用程序。我有一个主要的应用程序做自己的事情,但当我启动它,它做一个AsyncTask调用“消息”应用程序,它检查是否有任何未读消息,然后在状态栏中显示通知。

然而,当我调用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 个答案:

答案 0 :(得分:1)

正如其他人所指出的,服务是可行的方法。但是,如果您使用bindService(),则服务只会持续一段时间。

只是为了澄清一些问题:

  • 使用startActivity与后台任务进行通信并不是您想要的,因为Activity是一个用户界面组件,在激活时将会出现在前面。
  • 建议您在“消息”应用程序中添加service主应用程序。
  • 然后,您可以通过绑定到服务与主应用程序中的“messages”应用程序进行通信。如果这样做(使用bindService),服务将无法无限期运行。
  • 有关如何执行此操作的详细信息,请here

您可以在没有AsyncTask的情况下完成所有这些操作,但是如果服务需要大量时间来完成其工作,则可能有助于避免阻止UI线程。或者,您的服务可以使用自己的后台线程来检查消息并发布通知。

答案 1 :(得分:0)

您是否考虑过make com.test.messages.MessageCheck Service而不是Activity,然后调用startService(...)

答案 2 :(得分:0)

您正在ASyncTask中启动一个Activity,因此您当前的Activity将被置于后面。

为了防止这种情况,您必须使用不同的方法来检查是否有新消息。您可以在ASyncTask中执行该验证并显示其通知,或使用服务。