我正在制作一个收音机应用程序,我希望在我更改活动时保持流运行!我读到我可以使用服务,但它对我来说很复杂!所以我更喜欢AsyncTask,如何在活动取消时让AsyncTask活着?
static class Player extends AsyncTask<String, Void, Boolean> {
@Override
protected Boolean doInBackground(String... strings) {
Boolean prepared = false;
try {
mediaPlayer.setDataSource(strings[0]);
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
Log.d("myTag", "This is my listnner");
initialStage = true;
playPause = false;
id_play.setImageResource(R.drawable.play);
mediaPlayer.stop();
mediaPlayer.reset();
}
});
mediaPlayer.prepare();
prepared = true;
} catch (Exception e) {
// Log.e("MyAudioStreamingApp", e.getMessage());
prepared = false;
}
return prepared;
}
@Override
protected void onPostExecute(Boolean aBoolean) {
super.onPostExecute(aBoolean);
if (progressDialog.isShowing()) {
progressDialog.cancel();
}
mediaPlayer.start();
initialStage = true;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog.setMessage("Buffering...");
progressDialog.show();
}
}
答案 0 :(得分:0)
这是一个非常糟糕的方法。 AsyncTask
用于短生活过程。它不适合MediaPlayer
,因为您还想暂停,停止,恢复和重新启动。此外,从可用性方面来看,您希望在锁定屏幕或最近活动列表中拥有MediaPlayer的状态栏。
考虑到这一点,你必须使用Service
,在这种情况下,前台服务是可行的方法。还有一个很好的Android开发人员指南。
https://developer.android.com/guide/topics/media/mediaplayer.html