当活动取消时,我如何让AsyncTask活着?

时间:2017-09-20 10:14:21

标签: android android-asynctask stream

我正在制作一个收音机应用程序,我希望在我更改活动时保持流运行!我读到我可以使用服务,但它对我来说很复杂!所以我更喜欢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();
        }
    }

1 个答案:

答案 0 :(得分:0)

这是一个非常糟糕的方法。 AsyncTask用于短生活过程。它不适合MediaPlayer,因为您还想暂停,停止,恢复和重新启动。此外,从可用性方面来看,您希望在锁定屏幕或最近活动列表中拥有MediaPlayer的状态栏。

考虑到这一点,你必须使用Service,在这种情况下,前台服务是可行的方法。还有一个很好的Android开发人员指南。

https://developer.android.com/guide/topics/media/mediaplayer.html