0

私はサービスの使い方を学んでいるところですが、行き詰まっています。

IntentServiceファイルのキューをダウンロードするために使用するものがあります。Activityダウンロードするファイルのオンとオフを切り替えることができる機能があります。ファイルのダウンロードが完了したら、のブール値を更新しますSharedPreferences。2つの質問/問題があります:

  1. サービスを開始した元のアクティビティがなくなっている可能性がありますが、そのアクティビティの新しいインスタンスが開始されている可能性があります。その場合、SharedPreferencesを確認し、それに応じてUIを更新するために、そのアクティビティにメッセージを送信する必要があります。したがって、私の質問は次のとおりです。実行されている場合と実行されていない場合があるアクティビティにメッセージを送信するにはどうすればよいですか?

  2. アクティビティは、サービスの実行中にダウンロードする必要のあるファイルのオンとオフを切り替えることができます。これにより、いくつかの状況が発生します。サービスが実行されておらず、ファイルがオンになっている場合は、このファイルをキューに追加してサービスを開始します。サービスが実行されていてファイルがオンになっている場合は、ファイルをキューに追加するだけです。サービスが実行されておらず、ファイルがオフになっている場合、私はすでにそれを削除する方法を持っています。ただし、サービスが実行中でファイルをダウンロードしていない場合は、ファイルをキューから削除するか、現在ダウンロードしている場合は、ダウンロードを停止します。SharedPreferencesにダウンロードする必要のあるファイルを保持しているので、SharedPreferencesを確認するメッセージをサービスに送信することで、これらすべてをカバーできると思います。これは私の2番目の質問につながります:サービスが実行されているかどうかを確認し、実行されている場合はメッセージを送信するにはどうすればよいですか?

4

4 に答える 4

3

おそらく必要なのは、ある種のバインドされたサービスです。 http://developer.android.com/guide/topics/fundamentals/bound-services.html メッセージを送受信できます。したがって、アクティビティが再開されると、サービスに再度バインドされ、ダウンロードが終了したときにコールバックを受け取ることができます。さらに、アクティビティはサービスにメッセージを送信して、ダウンロードを開始または停止できます。良い部分:サービスにバインドするとサービスが開始され、まだ実行されていません。

これがお役に立てば幸いです:)

于 2012-06-16T18:44:46.937 に答える
1

あなたの質問1と質問2への可能な答え:

broadcastReceiversを使用する:http://developer.android.com/reference/android/content/BroadcastReceiver.html

質問1の場合:アクティビティを定義するある種の受信者に登録し、ブロードキャストしたいときにいつでも送信できます。アクティビティがブロードキャストに登録されている場合-それを受信します...

質問2の場合:同じ答え:サービスを特別なブロードキャストに登録することは、サービスに配信したいメッセージを表します。それが実行されていない(そしてブロードキャストに登録されていない)場合、何も起こりません。

于 2012-06-16T19:07:33.117 に答える
1

インテントを送信するために使用LocalBroadcastManagerします。インテントはアプリケーションスコープにとどまり、アクティビティでブロードキャストレシーバーを使用します。

于 2013-11-07T14:57:41.980 に答える
0
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager
            .getRunningServices(Integer.MAX_VALUE)) {
        if ("com.pkg.PlayerService".equals(service.service
                .getClassName())) {
            isrunning = true;
            ;
        }
    }
    return isrunning;

このコードを実行すると、uにサービスのステータスが与えられます。uはur intentServiceのonDestroy()にログインして、サービスがいつ停止するかを確認できます。

于 2012-06-16T19:09:21.760 に答える