直接传activity 引用肯定是不行的,
最简单的是 用静态全局变量 ,不过不推荐。
所以只能复杂一点 ,不能service可以直接调用activity ,只能传消息给activity ,让activity 执行特定的方法。
就是 service start activity 。
而activity 设置为 single instance ,在newIntent 方法 里面 处理 传入消息。
还有一个方法就是activity 里面定义 一个 内部类 broadcast ,然后 service 调用sendbraoadcast ,
broadcast 再调用 activity 方法。
android开发中获取当前的Activity有多种情况;
在Activity中,this就是当前的Activity,例如thisstartActivity。
在Fragment中可以通过 getActivity()来得到当前装载这个Fragment的Activity。
通过Activity堆栈来获取当前显示的这个Activity
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
ComponentName cn = amgetRunningTasks(1)get(0)topActivity;
通过service中的onBind方法,这个方法的参数是Intent,通过Intent就能获得传入的值。
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
Loge("onBind", "onBind");
//看这 String url=intentgetStringExtra("url");
return new MyBinder();
}
service和activity交互要用广播(broadcast receiver),因为存在service要给activity发消息时候,activity并未启动的情况。
当activity启动时候,广播随之启动,收到广播做出相应的 *** 作。具体的可以在网上找找广播的相关介绍
(1)ActivityManagerService 创建并初始化 BatteryStatsService,并传入耗电量记录文件batterystatsbin;
(2)BatteryStatsService 在内部创建 BatteryStatsImpl 实例,并传入耗电量记录文件batterystatsbin;
(3)ActivityManagerService 执行 mBatteryStatsServicegetActiveStatistics()readLocked();导致 BatteryStatsService 的 BatteryStatsImpl 加载batterystatsbin数据;
(4)在PowerUsageSummary计算App耗电量时,PowerUsageSummary从BatteryStatsService 中获取BatteryStatsImpl 实例,从而获得App的相关数据。
生命周期如下:
两种启动方式
第一种方式: startService()
通过startService启动后,service会一直无限期运行下去,只有外部调用了stopService()或stopSelf()方法时,该Service才会停止运行并销毁。
当第一次调用的时候,方法顺序是:
构造方法——oncreate()——onStartCommand()
当第二次被调用的时候,直接调用onStartCommand()
结束:stopService():——>onDestory()
第二种方式:bindService()
bindService启动的服务和调用者之间是典型的client-server模式。调用者是client,service则是server端。service只有一个,但绑定到service上面的client可以有一个或很多个。这里所提到的client指的是组件,比如某个Activity。
client可以通过IBinder接口获取Service实例,从而实现在client端直接调用Service中的方法以实现灵活交互,这在通过startService方法启动中是无法实现的。
bindService启动服务的生命周期与其绑定的client息息相关。client也可以明确调用Context的unbindService()方法与Service解除绑定。当所有的client与service解除绑定的时候,才会调用onUnbind,然后 Service会自行销毁。
第一次调用:
构造方法——oncreate()——onBind()——onServiceConnected()
结束:unbindService():如果当前有Activity与Service相连——>onUnbind()——>onDestory()
Intentservice
IntentService 是继承于 Service 并处理异步请求的一个类,在 IntentService 内有一个工作线程来处理耗时 *** 作,启动 IntentService 的方式和启动传统 Service 一样,同时,当任务执行完后,IntentService 会自动停止,而不需要我们去手动控制。
以上就是关于android里面activity如何把自己的引用传给service,使得service可以直接调用activity的方法全部的内容,包括:android里面activity如何把自己的引用传给service,使得service可以直接调用activity的方法、怎么获取当前运行的Activity、Android service如何获取Activity传入的值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)