如何在非Activity中启动,绑定Service
答案:2 悬赏:10 手机版
解决时间 2021-02-23 16:36
- 提问者网友:我的未来我做主
- 2021-02-23 09:56
如何在非Activity中启动,绑定Service
最佳答案
- 五星知识达人网友:舊物识亽
- 2021-02-23 10:45
做Android开发的都知道,启动或绑定服务的语句是startService、bindService,可是这两个方法一般都只能在Activity中使用,也就是用Activity才能“.”的出这方法
做Android开发的都知道,启动或绑定服务的语句是startService、bindService,可是这两个方法一般都只能在Activity中使用,也就是用Activity才能“.”的出这方法。那如何在非Activity中开始、绑定服务呢?
以Fragment为例:
一个MyFragment类是继承Fragment,他不是Activity类型。但是,一个非Activity的类总是和Activity类有关联的,需要在Activity中调用非Activity中的参数、方法之类,这就给了我们在非Activity类中调用startService、bindService的机会。即将Activity类名这个参数传到非Activity中,然后调用方法启动服务。
如在Activity中调用MyFragment的时候:
FragmentManager fragmentMgr = getSupportFragmentManager();
FragmentTransaction ft = fragmentMgr.beginTransaction();
MyFragment fragment = new MyFragment(this); 在这一句里加一个参数
ft.add(R.id.main_tab1_bofang, fragment );
ft.commit();
然后,我们在MyFragment中创建一个以Activity为参数类型的构造方法:
public MyFragment(Activity Activity) {
Log.e("onCreateView", "准备绑定服务");
Intent service=new Intent(Activity.getApplicationContext(),MusicService.class);
Activity.getApplicationContext().bindService(service, conn, Context.BIND_AUTO_CREATE);
}
注意事项:在一些类中,我们不能直接使用bindService这个方法,得通过Activity.getApplicationContext()来使用,如在TabActivity类中。
做Android开发的都知道,启动或绑定服务的语句是startService、bindService,可是这两个方法一般都只能在Activity中使用,也就是用Activity才能“.”的出这方法。那如何在非Activity中开始、绑定服务呢?
以Fragment为例:
一个MyFragment类是继承Fragment,他不是Activity类型。但是,一个非Activity的类总是和Activity类有关联的,需要在Activity中调用非Activity中的参数、方法之类,这就给了我们在非Activity类中调用startService、bindService的机会。即将Activity类名这个参数传到非Activity中,然后调用方法启动服务。
如在Activity中调用MyFragment的时候:
FragmentManager fragmentMgr = getSupportFragmentManager();
FragmentTransaction ft = fragmentMgr.beginTransaction();
MyFragment fragment = new MyFragment(this); 在这一句里加一个参数
ft.add(R.id.main_tab1_bofang, fragment );
ft.commit();
然后,我们在MyFragment中创建一个以Activity为参数类型的构造方法:
public MyFragment(Activity Activity) {
Log.e("onCreateView", "准备绑定服务");
Intent service=new Intent(Activity.getApplicationContext(),MusicService.class);
Activity.getApplicationContext().bindService(service, conn, Context.BIND_AUTO_CREATE);
}
注意事项:在一些类中,我们不能直接使用bindService这个方法,得通过Activity.getApplicationContext()来使用,如在TabActivity类中。
全部回答
- 1楼网友:怙棘
- 2021-02-23 11:26
startservice()一旦被创建 调用着无关 没法使用service里面的方法 bindservice () 把service 与调用者绑定,如果调用者被销毁, service会销毁 bindservice() 我们可以使用service 里面的方法 bindservice(). 让activity能够访问到service
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯