问题标签 [android-service-binding]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 通过旋转、离开应用程序时杀戮和横向关闭屏幕来保持服务存活的问题
我有一项服务需要满足以下条件
1)服务需要在应用程序处于前台时运行。
2)活动轮换时,不停止服务
3) 即使您在打开一个特定片段时最小化应用程序,该服务也必须保持活动状态。
4)当活动停止(不是通过旋转)并且它不是特定的片段时,停止服务。
我在 onstart/onstop 中启动/停止我的服务。我最终使用布尔值来跟踪屏幕是否在旋转。
我正在像这样开始/停止我的服务
context.getApplicationContext().startService(intent)
context.getApplicationContext().stopService(intent)
除了一种情况外,它工作得很好。
当您在横向关闭屏幕时,Android 出于某种原因决定它需要重新创建整个活动,并在整个生命周期中调用。我已经在 4.4 和 5.0.1 的基本应用程序中复制了它,并且它已在其他线程中显示,例如 this。
当它这样做时,不能依赖旋转/不旋转,我猜测由于事情发生的速度有多快(多个 onStop/onStarts),它会导致竞争条件。当我返回应用程序时,有时它会工作,有时会挂起(没有错误),有时会运行两个服务。
它变成了一个兔子洞,我开始检查,当它进入 onStart 时屏幕是否关闭,所以下次调用 onStart 时它知道它是从一个被标记为旋转的屏幕关闭游戏返回(因为Android 现在正在将其从纵向锁定屏幕旋转回横向)。这越来越荒谬,而且效果不佳。
一个线程建议使用无头片段让它在旋转中存活,但是当应用程序关闭时我仍然需要它停止,所以我最终遇到了同样的问题。
有没有推荐的方法来解决这个问题?如果应用程序关闭(除了 1 片段),则不允许该服务保持活动状态,这将只是一个巨大的电池消耗,并且它需要在旋转中幸存下来,否则它会中断事情。
android - 即使在用户长按并杀死应用程序后如何保持我的服务和进程打开
我想定期从服务器获取数据并放入数据库而不打开应用程序,所以我希望我的服务总是在有或没有活动的情况下打开。
所以我想保持我的服务始终开放。这意味着我希望我的服务不受活动限制,但现在当我长按并退出应用程序时,服务会停止。
有人可以知道如何解决它。谢谢 WhatsApp Facebook 等许多应用程序都这样做。即使我们长按并换出应用程序,服务和进程仍然没有关闭。我想要类似的功能
java - 如何停止后台服务?
我正在开始 Android 开发,现在正在学习服务。
我创建了一个简单的服务来连续烤一个字符串。
我拿了两个按钮来启动和停止服务。
当我单击开始按钮时,服务会启动并持续烘烤字符串。
但是当我通过单击停止按钮来停止服务时,它并没有停止。
它将继续不断地烘烤字符串。
这是启动和停止服务的代码
android - 无法在服务中运行任务
我知道这是一个基本问题,我是 android 服务的新手。我对 Google 和 StackOverflow 进行了研究。stackoverflow 中有很多与我的主题相关或相似的问题,但我无法得到正确的答案,我被转移到不同的主题。
这是我正在运行的简单测试代码。
在此弹出 Toast 消息并每 3 秒打印一次 Log 消息,即使在应用程序最小化时它也能正常工作。但是当我完全退出应用程序时,没有 Toast 或 Log 打印。在这个SO ANSWER中清楚地说明了为什么在没有 UI 的情况下无法调用 Toast 消息。而且由于进程被杀死,我无法打印 LOG。
基本上,我希望该服务每 5 分钟在后台运行一次,并且需要从在线获取数据。我应该如何实施服务?并且感谢任何示例代码或教程?
android - Android 从服务类检测 MediaPlayer 缓冲区更新
我在 Service 类中实现了一个 MediaPlayer,以便可以从任何活动中访问播放器。因为我可以在任何活动中使用 MediaPlayer,所以在从一个活动切换到另一个活动时显示缓冲区更新很重要。
为了检测缓冲区更新,我在服务类中使用了 OnInfo() 方法
这里 sendBufferCompleteBroadcast() & sendBufferStartBroadcast() 是两个广播,用于检查Service类之外的更新值
要检查 Activity 类的更新,我使用了这种方法,
但这不能正常工作,每当我从其他 Activity 切换到另一个 Activity 时,缓冲区更新就会很多并且没有显示任何进展。
android - 我可以在代码中显式启动 NotificationListenerService,而不是由操作系统为我启动它吗?
我有派生自 NotificationListenerService 的类,它会在应用程序启动时自动为我创建和启动。但是,我想稍后从活动中懒惰地启动服务,而不是在应用程序启动时自动启动它。是否有可能做到这一点?清单是:
请注意,在可以使用 NotificationListenerService 之前,用户必须通过设置授予应用通知访问权限。但是,如果从清单中删除意图过滤器,则应用程序不会出现在设置中,因此用户无法授予权限,因此未经许可无法启动服务。似乎操作系统需要该意图过滤器才能在设置中显示应用程序。
更新: BIND_NOTIFICATION_LISTENER_SERVICE 的文档说:
NotificationListenerService 必须要求,以确保只有系统可以绑定到它。
所以我想这意味着只有操作系统可以启动 NotificationListenerService 而其他人都不能。
android - 在 Android 服务的队列中删除文件
在我的应用程序中,我想从服务器下载和上传文件。我正在使用服务来做到这一点。在onStartCommand
我正在创建一个将下载内容的线程。我显示了一个有待处理意图的下载通知。单击通知时,它将显示ProcessManager
哪些正在进行上传和下载过程。
我的问题是我想从ProcessManager
页面中删除上传或下载队列中的文件。我无法使用意图服务,因为我每次启动时都需要获取下载状态。我两个都用过Service and BindService
。请指导我如何做到这一点。
android - 从服务更新数据库,然后处理活动的变化 - 如何?
我有一个简单的消息应用程序。它使用 STOMP over Websockets 从服务器接收数据(消息)。
我想将所有 websockets 东西移动到我可以绑定到我的活动以通过它发送消息的服务。
使用 Binder,我可以在 Activity 中运行 Service 方法,因此发送消息不是问题。问题是接收消息并将它们放到 Activity 的视图中。
我想用本地数据库做到这一点,就像这样:
- 服务从 STOMP 接收消息
- 服务将该消息放入本地数据库
- Activity 以某种方式了解数据库中有新消息并将其放入 ListView(使用 CursorAdapter?)。
我怎样才能做到这一点?也许我需要在 Activity 和 Service 中使用 SAME 数据库 ContentResolver 之类的东西?
service - 如何从服务中调用分片方法
我已经实施了服务。它将在后台运行一次 3 分钟。在服务中,我从 Web 服务中获取价值并存储在数据库中。
用户在 SAME UI 中,数据必须更新。我正在将数据库中的数据显示到列表视图中。
以下是我的服务类:
在片段中,我有一个名为 getDataFromDB() 的方法
如何在服务中调用此方法,并且 UI 会动态更新。
谁能帮我过来这个 prm
android - Service 对象被销毁后会发生什么
假设我绑定到一个服务,并通过 IBinder 对象获得了对它的对象引用。我将引用作为字段存储在我的 Activity 对象中。然后我取消绑定导致其破坏的服务。Activity中的Service引用在Service销毁后指的是什么?