startService()メソッドを呼び出してサービスを開始するアンドロイドアプリを1つ作成しました。割り当てられたタスクが完了したらサービスを停止したい。対応するタスクが完了していることを確認するにはどうすればよいですか? onStartCommand()でstopSelf()を呼び出すことはできますか? stopSelf()メソッドまたはstopService()メソッドを呼び出すベストプラクティスは何ですか?どこでその呼びかけをするべきですか?
ありがとうございます!サービスを停止するためにAndroidのstopSelf()メソッドまたはstopService()メソッドを呼び出すことはできますか?
1
A
答えて
0
// main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="Services Demo" android:gravity="center" android:textSize="20sp" android:padding="20dp"/>
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/buttonStart" android:text="Start"></Button>
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Stop" android:id="@+id/buttonStop"></Button>
</LinearLayout>
//Activity class
public class ServicesDemo extends Activity implements OnClickListener {
private static final String TAG = "ServicesDemo";
Button buttonStart, buttonStop;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
buttonStart = (Button) findViewById(R.id.buttonStart);
buttonStop = (Button) findViewById(R.id.buttonStop);
buttonStart.setOnClickListener(this);
buttonStop.setOnClickListener(this);
}
public void onClick(View src) {
switch (src.getId()) {
case R.id.buttonStart:
Log.d(TAG, "onClick: starting srvice");
startService(new Intent(this, MyService.class));
break;
case R.id.buttonStop:
Log.d(TAG, "onClick: stopping srvice");
stopService(new Intent(this, MyService.class));
break;
}
}
}
//Service class
public class MyService extends Service {
private static final String TAG = "MyService";
MediaPlayer player;
@Override
public IBinder onBind(Intent intent) {
Toast.makeText(this, "My Service Bind", Toast.LENGTH_LONG).show();
return null;
}
@Override
public void onCreate() {
Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();
Log.d(TAG, "onCreate");
player = MediaPlayer.create(this, R.raw.preview);
player.setLooping(false); // Set looping
}
@Override
public void onDestroy() {
Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();
Log.d(TAG, "onDestroy");
player.stop();
}
@Override
public void onStart(Intent intent, int startid) {
Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
Log.d(TAG, "onStart");
player.start();
}
}
2
特定のタスクを実行してサービスを停止する場合は、IntentService
を使用することをお勧めします。 IntentService
を使用すると、タスクが完了したときにBroadCastReceiver
を使用して通知が届きます。 Here
は完全な説明の例です。
関連する問題
- 1. AndroidサービスonStartCommand()内からstopSelf()を呼び出すことはできますか?
- 2. Service.onStartCommandでstopSelf()を呼び出すことはできますか?
- 3. stopService()の呼び出しでサービスが停止しない
- 4. Androidはサービスを停止しますstopSelf()はまだ返品が必要です
- 5. メソッドが再び呼び出されるまでメソッドを一時停止する
- 6. cocos2dxの一時停止メニューで一時停止中にメソッドを呼び出すことができません
- 7. WCFサービスがメソッドをクライアントから呼び出すことはできますか?
- 8. 停止したSparkContextのメソッドを呼び出せません
- 9. rootViewControllerでメソッドを呼び出すことはできますか?
- 10. onPauseメソッドが呼び出されたときにサービスを停止する方法は?
- 11. foreachPartitionAsync throwsは停止したSparkContextのメソッドを呼び出せません
- 12. JAVA:プロセスが停止したときにメソッドを呼び出す方法(それは可能ですか?)
- 13. Androidのサービスはdesstroyed、私は2時間のように費やす必要がありstopService()またはstopSelf
- 14. 子のオーバーロードされたメソッドから祖先のメソッドを呼び出すことはできますか?
- 15. Flex - RemoteObjectメソッド呼び出しを中止/停止する方法
- 16. 現在のメソッドは、どのメソッドが呼び出されたかを知ることができますか?
- 17. ジェネリックメソッドに渡す型のメソッドを呼び出すことはできますか?
- 18. AndroidのgetView()メソッドでsetContentView()メソッドを呼び出せますか?
- 19. インタフェース暗黙メソッドを呼び出すことはできますが、明示メソッドを呼び出すことはできませんか? (インタビュークエスト!on)
- 20. Stopself止めないサービスのAndroid
- 21. コンストラクタの前にメソッドを呼び出すことはできますか?
- 22. 使用方法androidのWebサービスを呼び出すための取得メソッド
- 23. 値が変更されるたびにメソッドを自動的に呼び出すことはできますか?
- 24. は、初期化の前にオートコンプリートのメソッドを呼び出すことはできません。メソッド 'option'を呼び出そうとしました
- 25. 初期化の前にツールチップのメソッドを呼び出すことはできません。 「破棄」メソッドを呼び出そうとしました:Yii2はlobipanel
- 26. メソッドが呼び出された後のスレッドの一時停止
- 27. MPAndroidChartのonValueSelectedメソッドからregisterForContextMenuを呼び出すことはできますか?
- 28. サーバーが停止したら、このスニペットはサーバーを繰り返し呼び出すのを止めますか?
- 29. C#のオブジェクトリテラルでメソッドを直接呼び出すことはできますか?
- 30. Durandalでカスタムバインドウィジェットのメソッドを呼び出すことはできますか?
あなたは、あなたのAndroid SDKディレクトリを開き、開い 'AlarmService_Service.java'詳細についてはApiDemos' SRC/com.example.android.apis.app'に閲覧することができます。 –