android里面activity如何把自己的引用传给service,使得service可以直接调用activity的方法

android里面activity如何把自己的引用传给service,使得service可以直接调用activity的方法,第1张

直接传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传入的值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9759673.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存