startService问题。如何解决?

时间:2019-06-20 16:16:56

标签: java android android-service android-backup-service

我有一个开始活动,该活动正在使用服务播放背景音乐,并且5秒钟后加载了另一个活动。 问题在于第二个活动中声音无法加载或服务无法正常工作...我不确定发生了什么。

在应用启动时,声音会在第一个活动中起作用。

这是第一个活动:

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        //remove window title and make it fullscreen
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        //bind activity
        setContentView(R.layout.start_activity);
        ButterKnife.bind(this);

        Intent intent = new Intent(StartActivity.this, SoundService.class);
        intent.putExtra("filename", "audiostart");
        //start service and start music
        startService(intent);

        int TIME_OUT = 5000;
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                Intent i = new Intent(StartActivity.this, AvatarsActivity.class);
                startActivity(i);
                finish();
            }
        }, TIME_OUT);


        Log.d(TAG, "APP Started!");
    }

    @Override
    protected void onDestroy() {
        //stop service and stop music
        stopService(new Intent(StartActivity.this, SoundService.class));
        super.onDestroy();
    }

第二项活动:

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.avatars_activity);
        ButterKnife.bind(this);

        Intent intent = new Intent(AvatarsActivity.this, SoundService.class);
        intent.putExtra("filename", "audioavatars");
        //start service and start music
        startService(intent);
    }

    @Override
    protected void onDestroy() {
        //stop service and stop music
        stopService(new Intent(AvatarsActivity.this, SoundService.class));
        super.onDestroy();
    }

这是服务:

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }


    public void onCreate() {
        player = MediaPlayer.create(this, R.raw.audio);
        player.setLooping(false);
    }

    public int onStartCommand(Intent intent, int flags, int startId) {
        if(intent != null){
            String mFilename = intent.getStringExtra("filename");
            Toast toast = Toast.makeText(getApplicationContext(), "Filename: " + mFilename, Toast.LENGTH_SHORT);
            toast.show();
        }

        player.start();
        return Service.START_NOT_STICKY;
    }

    public void onDestroy() {
        player.stop();
        player.release();
        stopSelf();
        super.onDestroy();
    }
  1. 当我在第一个活动中经过5秒后加载第二个活动时,我想要背景声音。

  2. 第二个问题是我想在服务中的onCreate方法中传递变量,并根据活动播放什么声音。 (我认为我可以完成此任务,但询问意见如何执行并不会受到伤害)

2 个答案:

答案 0 :(得分:0)

您的代码似乎正常。但是,您是否已在清单文件中注册了服务?请检查您的清单。您的服务未注册可能是原因。

答案 1 :(得分:0)

您将在延迟5秒后开始第二个活动,并在排队意图之后立即在第一个活动上调用finish(),这将触发同一活动的onDestroy回调。在第一个活动的onDestroy()中,您实现了停止服务,这导致服务停止。

在两个活动中都删除onDestroy()的实现,并向用户提供一种显式停止服务的方法(单击按钮或其他方法),而不是在活动生命周期回调中执行该操作。