Android 如何在onCreate之前强制运行onStart命令
如果有人帮我解决这个问题,我真的很感激。 我有两个服务,第一个使用Intent向第二个服务发送数据。由于这是一项服务,我使用以下代码获得额外服务:Android 如何在onCreate之前强制运行onStart命令,android,Android,如果有人帮我解决这个问题,我真的很感激。 我有两个服务,第一个使用Intent向第二个服务发送数据。由于这是一项服务,我使用以下代码获得额外服务: @Override public int onStartCommand (Intent intent, int flags, int startId){ theme = intent.getExtras().getInt("theme"); Log.v("pos1 : ", String.valueOf(theme));
@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)
这就是我所做的,我只是删除了onCreate方法,然后将传递的字符串传递给OnStartCommand 当我使用MediaPlayer服务时,该服务在OnCreate中创建媒体播放器,然后我将我的媒体播放器创建转换为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);
}
然后我在onstart命令中得到日期
@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;
}
这是不可能的。操作系统在实例化您的服务类后调用
onCreate()
,然后开始传递start命令。@Karakure不幸的是,情况就是这样。我逐行跟踪,发现系统在onCreate()完成后调用onStartCommand()
,您误解了我的评论。我的意思是不可能实现您想要的操作,因为系统总是在开始传递start命令之前首先调用onCreate()
。没有办法让它做相反的事情。@karakuri-oh。谢谢你的解释。但是,您是否知道如何将数据从服务
传递到服务
,并在onCreate
中使用?正如我所说,您不能。无论您想对该数据执行什么操作,都必须在onStartCommand
中执行。