如何在onCreate之前强制onStartCommand运行

时间:2016-12-25 19:20:32

标签: android

如果有人帮我解决这个问题,我真的很感激。 我有两个服务,第一个使用Intent将数据发送到第二个服务。因为它是一个服务,我在下面的代码中用来获取额外内容:

  @Override
  public int onStartCommand (Intent intent, int flags, int startId){

    theme = intent.getExtras().getInt("theme");
    Log.v("pos1 : ", String.valueOf(theme));

   return START_STICKY;
   }

之后,声明onCreate()。

   @Override
   public void onCreate() {
        super.onCreate();

        if(theme != 0)
        // do something
    Log.v("pos2 : ", String.valueOf(theme));
    }

但是,在onCreate()上的所有任务执行之前,变量“theme”仍然等于零。然后onStartCommand()执行。 调试的结果是这样的

pos2 : 0
pos1 : 5 (the value that have sent from first service)

1 个答案:

答案 0 :(得分:0)

这就是我所做的,好吧,我删除了onCreate方法,然后将传递的String传递给OnStartCommand。

当我使用MediaPlayer服务时,该服务在OnCreate中创建媒体播放器,然后我将Media Player创建转移到OnStartCommand并删除了OnCreate方法。

if (view == play) {
                String newstring= "Hello.mp3";
                Intent serviceIntent = new Intent(getActivity(), BackgroundAudioService.class);
                serviceIntent.putExtra("NewSong", newstring);
                getActivity().startService(serviceIntent);
                play.setVisibility(View.GONE);
                pause.setVisibility(View.VISIBLE);
            }

然后我在OnStartCommand中获取日期

@Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        ChalisaName= intent.getStringExtra("NewSong");
        mediaPlayer = MediaPlayer.create(getApplication(),  Uri.parse(Environment.getExternalStorageDirectory().getPath()+ "/MyPath/" + NewSong));
        if (!mediaPlayer.isPlaying()) {
            mediaPlayer.start();
        }
        mediaPlayer.setOnCompletionListener(this);
        return START_STICKY;

    }