2011-06-28 12 views
0

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:MessagesCheckはフロントにジャンプし、どのようにそれを停止する理由

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; 
    } 
} 

誰もが私を伝えることはできますか?もし私がやっていることが実現可能であっても?

+0

あなたはおそらく、あなたのMessageCheckアクティビティでAsyncTaskを使用したいと思っています。長い仕事がそこで行われているように思われるからです。 – Rasel

+0

自分でMessagesCheckを書きましたか? – Marmoy

+0

バックグラウンドスレッドからアクティビティを開始するのはなぜですか?時期尚早の最適化。 D.クヌースはあなたに非常に怒っています:) – Macarse

答えて

1

他の人が指摘しているように、サービスは行く方法です。しかし、bindService()を使用した場合、サービスはそれが適用されている間だけ持続します。ただ、問題のいくつかを明確にする

:活動が活性化されると、フロントに来るユーザインターフェースコンポーネント、あるとしてバックグラウンドタスクと通信するstartActivityを使用し

  • は、あなたが望むものではありません。
  • 「メッセージ」アプリケーションにserviceを追加することをお勧めします。ではなく、メインアプリケーションです。
  • これで、サービスにバインドすることで、メインアプリケーションの「メッセージ」アプリケーションと通信できます。これを(bindServiceを使用して)行うと、サービスは無期限に実行されません。
  • 詳細はhereです。

あなたはサービスがその仕事をするためにかなりの時間を要する場合しかし、それはUIスレッドを遮断避けるために役立つかもしれない、AsyncTaskなく、すべてこれを行うことができます。あるいは、あなたのサービスは、独自のバックグラウンドスレッドを使ってメッセージをチェックし、通知をポストすることができます。

+0

ありがとう!これは私が必要とするものです。 – Otra

+0

それを聞いてうれしい。ところで、あなたのすべてのサービスが通知を投稿している場合は、[IntentService](http://developer.android.com/reference/android/app/IntentService.html)をチェックしてみてください。私はそれを使用していないが、シンプルなモデルのように見えます。 – mich

+0

メッセージがあればまずサーバーと照合し、通知を送信します。 – Otra

0

あなたは考えがありますが、あなたの現在の活動をにしたので、あなたは、あなたのASyncTaskで活動を始めているSTARTSERVICE(...)

+0

MessageCheckは私が電話したいと思う完全な他のアプリケーションです。そして私が読んだことから、無期限にサービスを実行しないのですか?メッセージアプリケーションが呼び出されただけで、未読メッセージがあればそれをユーザーに通知してください。 – Otra

+0

あなたが望むことができない場合は、MessageCheckを起動します。バックグラウンドでアクティビティを試してみると、一時停止されます。バックグラウンドで実行するには、サービスが必要です。 – GeekYouUp

+0

私はそれを試してみました。私はそれをAsyncTaskからサービスに変えました。しかし、私のメッセージアプリケーションがフォアグラウンドにジャンプする場合も同じことが起こります。私はまだ何か間違っているのですか?私は 'doInBackground'ですべてをとって、サービスの' onCreate'メソッドに貼り付けました。 – Otra

0

を呼び出し、com.test.messages.MessageCheckサービスではない活動を行いますバック。

これを防ぐには、新しいメッセージがあるかどうかを別の方法で確認する必要があります。 ASyncTaskでその検証を行い、そこから通知を表示することも、サービスを使用することもできます。

関連する問題