我有一个名为Main的Android Activity,它调用一个名为MainService的服务,如下所示:
Intent intent = new Intent(this, MainService.class);
if(MainService.getInstance() == null){
Log.d(TAG, "Calling MainService");
startService(intent);
}
MainService在其生命周期内维护一个我希望稍后在Main中访问的变量。我该怎么做?
感谢。
答案 0 :(得分:3)
您可以绑定服务,并可以永久拥有服务实例。以下示例代码将帮助您: -
服务类
public class MusicService extends Service {
MyBinder binder=new MyBinder();
MusicService services;
static Context context;
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return binder;
}
@Override
public void onCreate() {
super.onCreate();
context=getApplicationContext();
MediaPlayer mPlayer = MediaPlayer.create(getApplicationContext(), R.raw.yaar);
mPlayer.start();
}
public class MyBinder extends Binder
{
public MusicService getServiceSystem()
{
return MusicService.this;
}
}
@Override
public void onDestroy() {
super.onDestroy();
}
}
活动
public class MainActivity extends AppCompatActivity {
MusicService services;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ServiceConnection connection=new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
MusicService.MyBinder binderr=(MusicService.MyBinder)service;
services=binderr.getServiceSystem();
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
Intent intent= new Intent(this, MusicService.class);
startService(intent);
}
}
然后,您可以在活动中的任何位置使用service
。希望它有所帮助。
答案 1 :(得分:1)
是的,您可以访问服务中的变量,但为此您必须首先绑定到此服务。之后,使用访问器来获取或设置变量或调用服务的任何其他方法。 见https://developer.android.com/guide/components/bound-services.html