我想使用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跳到前面以及如何阻止它?或者,如果我正在做的甚至可行?
答案 0 :(得分:1)
正如其他人所指出的,服务是可行的方法。但是,如果您使用bindService(),则服务只会持续一段时间。
只是为了澄清一些问题:
startActivity
与后台任务进行通信并不是您想要的,因为Activity是一个用户界面组件,在激活时将会出现在前面。您可以在没有AsyncTask的情况下完成所有这些操作,但是如果服务需要大量时间来完成其工作,则可能有助于避免阻止UI线程。或者,您的服务可以使用自己的后台线程来检查消息并发布通知。
答案 1 :(得分:0)
您是否考虑过make com.test.messages.MessageCheck Service而不是Activity,然后调用startService(...)
答案 2 :(得分:0)
您正在ASyncTask中启动一个Activity,因此您当前的Activity将被置于后面。
为了防止这种情况,您必须使用不同的方法来检查是否有新消息。您可以在ASyncTask中执行该验证并显示其通知,或使用服务。