データベースに詳細を送信するアクティビティがありますが、戻るボタンをクリックすると停止します。バックグラウンドで実行することは可能ですか? Service を使用すると問題が解決すると聞きましたが、私のクラスはすべてアクティビティとして記述されているため、可能かどうか知りたいです。onStop メソッドの一部のコードでは実行できませんか?
4 に答える
ねえ、
Service を拡張する新しいクラスを作成します。必要なオーバーライドを追加します。
@Override
public IBinder onBind(Intent intent)
{
// TODO Auto-generated method stub
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
//this service will run until we stop it
// This will execute when the service starts
return START_STICKY; //makes it sticky to keep it on until its destroyd
}
@Override
public void onDestroy()
{
super.onDestroy();
// when the service is destroyd
}
次の方法でサービスを開始できます。
stopService(new Intent(getBaseContext(), ServiceClassName.class));
次の方法でサービスを停止できます。
stopService(new Intent(getBaseContext(), ServiceClassName.class));
お役に立てれば :)
すべてのクラスがアクティビティとして記述されているとおっしゃいましたが、これは、アプリケーション ロジックがユーザー インターフェイス ロジックに埋め込まれていることを意味すると思います。これは一般的には良い方法ではありません。アプリケーション固有のコードを別のクラスに移行してみてください。この機能をユーザー インターフェイスの外に置くことで、アプリケーションは多くの点でメリットを得ることができます。
あなたの質問に答えるために、アプリケーションをサブクラス化することでバックグラウンドで機能を実行させることができますService
。素晴らしい説明については、こちらをご覧ください。
必要なことを行うには、onBackPressed メソッドをオーバーライドする必要があります。アクティビティを「非表示」にしたい場合 (アクティビティが「閉じた」ことをユーザーに知らせるため)、moveTaskToBackメソッドを呼び出すことができます。
アクティビティがインテントを使用して通信するサービスを作成する必要があります。したがって、データベースに送信するためにサービスにデータを送信する必要があり、サービスはアクティビティを通知できます。アクティビティがサービスからのイベントをリッスンするときは、オブザーバー パターン (Java や Android、その他多くのイベント処理システムのリスナー) を実装しています。
サービスをポーリングすることもできますが、これはステータスの更新を取得するための推奨されるパターンではありません。