Questions tagged «android-service»

服务是一种应用程序组件,代表应用程序执行长时间运行的操作而不与用户交互或提供功能供其他应用程序使用的愿望。



9
示例:使用消息传递在活动和服务之间进行通信
我找不到如何在活动和服务之间发送消息的任何示例,而我花了太多时间弄清楚了这一点。这是一个示例项目,供其他人参考。 此示例使您可以直接启动或停止服务,并分别与该服务绑定/解除绑定。服务运行时,它将以10 Hz的频率递增。如果活动绑定到Service,它将显示当前值。数据以整数和字符串的形式传输,因此您可以看到如何使用两种不同的方式。活动中还有一些按钮可以向服务发送消息(更改增量值)。 屏幕截图: AndroidManifest.xml: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.exampleservice" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name=".MyService"></service> </application> <uses-sdk android:minSdkVersion="8" /> </manifest> res \ values \ strings.xml: <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">ExampleService</string> <string name="service_started">Example Service started</string> …

4
getApplication()与getApplicationContext()
我找不到满意的答案,所以我们开始:Activity/Service.getApplication()和有Context.getApplicationContext()什么关系? 在我们的应用程序中,两个都返回相同的对象。在ActivityTestCase然而,嘲讽的应用程序将getApplication()回来与模拟,但getApplicationContext仍然会返回一个不同的上下文实例(一个由Android注入)。那是个错误吗?是故意的吗? 首先,我什至不了解其中的区别。在测试套件之外是否有案例,两个调用可能返回不同的对象?什么时候,为什么?而且,为什么getApplication在Activity和Service上定义了,但没有定义Context?难道不应该在任何地方都可以使用有效的应用程序实例吗?

16
Android 8.0:java.lang.IllegalStateException:不允许启动服务意图
在启动应用程序时,应用程序启动应执行某些网络任务的服务。定位到API级别26后,我的应用程序无法在后台在Android 8.0上启动服务。 引起原因:java.lang.IllegalStateException:不允许启动服务意图{cmp = my.app.tt / com.my.service}:应用程序在后台uid UidRecord {90372b1 u0a136 CEM空闲过程:1 seq(0,0 ,0)} 据我了解,它涉及: 后台执行限制 如果针对Android 8.0的应用尝试在不允许创建后台服务的情况下尝试使用该方法,则startService()方法现在将引发IllegalStateException。 “ 在不允许的情况下 ”-实际上是什么意思?以及如何解决。我不想将服务设置为“前台”

16
尝试在Android上启动时启动服务
当设备在android上启动时,我一直在尝试启动服务,但无法正常工作。我已经看了许多在线链接,但是这些代码都不起作用。我忘记了什么吗? AndroidManifest.xml <receiver android:name=".StartServiceAtBootReceiver" android:enabled="true" android:exported="false" android:label="StartServiceAtBootReceiver" > <intent-filter> <action android:name="android.intent.action._BOOT_COMPLETED" /> </intent-filter> </receiver> <service android:name="com.test.RunService" android:enabled="true" /> 广播接收器 public void onReceive(Context context, Intent intent) { if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) { Intent serviceLauncher = new Intent(context, RunService.class); context.startService(serviceLauncher); Log.v("TEST", "Service loaded at start"); } }

6
在服务中获取上下文
有没有任何可靠的方式来获得Context从Service? 我想为其注册一个广播接收器,ACTION_PHONE_STATE_CHANGED但是我不需要我的应用程序始终获取此信息,因此我不必将其放在中Manifest。 但是,当我需要此信息时,我无法让广播接收器被GC杀死,因此我要将广播接收器注册到中Service。 因此,我需要Context致电registerReceiver()。当我不再需要时,ACTION_PHONE_STATE_CHANGED我将其注销。 有小费吗?


13
如何让Android Service与Activity通信
我正在编写我的第一个Android应用程序,并试图使我了解服务和活动之间的通信。我有一个将在后台运行的服务,并执行一些gps和基于时间的日志记录。我将有一个活动,该活动将用于启动和停止服务。 因此,首先,我需要能够确定在启动活动时服务是否正在运行。这里还有其他问题,所以我想我可以弄清楚(但随时提供建议)。 我的真正问题是:如果活动正在运行且服务已启动,则我需要一种使服务向活动发送消息的方法。此时的简单字符串和整数-主要是状态消息。这些消息不会定期发生,因此,如果有其他方法,我认为轮询服务不是一个好方法。我仅在用户启动活动后才需要这种通信-我不想从服务中启动活动。换句话说,如果启动活动并且服务正在运行,那么当发生有趣的事情时,您将在活动UI中看到一些状态消息。如果您不启动活动,则不会看到这些消息(它们不是那么有趣)。 看来我应该能够确定Service是否正在运行,如果可以,则将Activity添加为侦听器。然后在“活动”暂停或停止时将“活动”作为侦听器删除。真的有可能吗?我能确定的唯一方法是让Activity实现Parcelable并构建一个AIDL文件,这样我就可以通过服务的远程接口传递它。但是,这似乎有点过分,而且我不知道Activity应该如何实现writeToParcel()/ readFromParcel()。 有没有更简单或更好的方法?谢谢你的帮助。 编辑: 对于以后对此感兴趣的任何人,都可从Google的示例代码中找到示例代码,该示例代码通过AIDL在以下示例目录中进行处理:/apis/app/RemoteService.java

23
Android致命信号11(SIGSEGV)位于0x636f7d89(代码= 1)。如何找到它?
我一直在阅读其他文章,以追踪SIGSEGV在Android应用程序中获取的原因。我计划在我的应用程序中搜索与Canvas使用相关的可能的NullPointers,但我SIGSEGV每次都会使用不同的内存地址。另外我看过code=1和code=2。如果内存地址是0x00000000,那么我就知道它是NullPointer。 我得到的最后一个是code=2: A/libc(4969): Fatal signal 11 (SIGSEGV) at 0x42a637d9 (code=2) 关于如何追踪这个的任何建议? 我有一个嫌疑犯,但是我还不愿意尝试它。我的应用程序使用OSMDroid API进行离线映射。OverlayItem类表示地图上的标记/节点。我有一个服务,可通过网络收集数据以填充OverlayItem,然后将其显示在地图上。为了简化设计,我将OverlayItem扩展到我自己的NodeOverlayItem类中,该类包括我在UI Activity和Service中使用的一些附加属性。这给了我关于UI和服务的单点信息。当发生更改时,我使用Intents广播到Activity来刷新UI映射。活动绑定到服务,并且有一个Service方法来获取NodeOverlayItem的列表。我认为这可能是OSMDroid API对OverlayItem的使用,和我的服务同时更新节点信息。(并发问题) 在我撰写本文时,我认为这确实是问题所在。令人头疼的不是将Node和OverlayItem从NodeOverlayItem中分离出来,而是因为Activity需要来自Node的一些数据,而该数据是服务所拥有的。另外,当创建活动(onResume等)时,需要根据活动不在时服务一直在维护的Node数据重新创建OverlayItem对象。例如,您启动应用程序,服务会收集数据,UI会显示它,您转到首页,然后回到应用程序,活动将需要从最新的服务节点数据中提取并重新创建OverlayItem。 我知道这不是一个很好的或明确的问题。就像我所有的SO问题都是利基或晦涩的。如果有人对如何解释这些SIGSEGV错误有任何建议,将不胜感激! 更新 这是在调试会话期间捕获的最新崩溃。我有3个这样的设备用于测试,在我进行开发和测试时,它们并不会全部崩溃。我添加了一些额外内容,以便可以记录GC日志记录。您可以看到该问题可能与内存耗尽无关。 03-03 02:02:38.328: I/CommService(7477): Received packet from: 192.168.1.102 03-03 02:02:38.328: I/CommService(7477): Already processed this packet. It's a re-broadcast from another node, or from myself. It's not a repeat broadcast though. 03-03 02:02:38.406: …

4
拒绝权限:startForeground需要android.permission.FOREGROUND_SERVICE
最近,我们突然看到了以下一些堆栈跟踪。为什么会这样呢?这是从应用程序尝试通过媒体通知和所有内容将音频评论服务移至前台时开始的。 java.lang.SecurityException: Permission Denial: startForeground from pid=1824, uid=10479 requires android.permission.FOREGROUND_SERVICE at android.os.Parcel.createException(Parcel.java:1942) at android.os.Parcel.readException(Parcel.java:1910) at android.os.Parcel.readException(Parcel.java:1860) at android.app.IActivityManager$Stub$Proxy.setServiceForeground(IActivityManager.java:5198) at android.app.Service.startForeground(Service.java:695) at com.example.app.services.AudioService.setUpMediaNotification(AudioService.java:372) at com.example.app.services.AudioService.setUpAndStartAudioFeed(AudioService.java:328) at com.example.app.services.AudioService.onStartCommand(AudioService.java:228) at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3667) at android.app.ActivityThread.access$1600(ActivityThread.java:199) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1681) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6669) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) Caused by: android.os.RemoteException: Remote stack …

9
Android –收听传入的SMS消息
我正在尝试创建一个用于监视传入的SMS消息的应用程序,并通过传入的SMS启动程序,它也应该从SMS读取内容。 工作流程: 短信已发送至Android设备 自我可执行的应用程序 阅读短信信息

6
android从服务开始活动
Android: public class LocationService extends Service { @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); startActivity(new Intent(this, activity.class)); } } 我从 Activity 在Activity如果条件满足启动 startService(new Intent(WozzonActivity.this, LocationService.class)); 从我LocationService上面提到的无法启动Activity,如何获取当前正在Activity服务类中运行的上下文?


3
导出的服务不需要许可:这是什么意思?
我创建了一个通过AIDL与其他应用程序绑定的服务,并将其添加到清单中,如下所示: <service android:name=".MyService"> <intent-filter> <action android:name="org.example.android.myservicedemo.IService" /> </intent-filter> </service> IService是AIDL接口。 这样,Eclipse会向我显示警告“ 导出的服务不需要许可”。如果删除intent-filter,警告会消失,但是显然应用程序无法绑定到该服务。 此警告是什么意思?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.