- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
看一下我必须流式传输在线广播的服务类(class)中的这个摘录:
public class StreamingService extends Service implements MediaPlayer.OnPreparedListener {
private static final String TAG = StreamingService.class.getSimpleName();
public static final String EXTRA_STATION_IP = "STATION_IP";
private MediaPlayer player = null;
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "Service Initialization.");
// initialize player
player = new MediaPlayer();
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setOnPreparedListener(this);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "Service is Starting.");
if(intent == null) {
// service restarted
player.prepareAsync();
}
return START_STICKY;
}
我知道返回 START_STICKY
会在可能的情况下重新启动我的服务,并以 null Intent 调用 onStartCommand()
。我不知道我的 MediaPlayer 实例是否重新启动后将处于相同状态。例如,假设我开始播放一些在线广播,并且在服务被终止并重新启动几次后,我是否能够检测到 null Intent 并运行 player.prepareAsync ();
(就像我正在做的那样),还是我必须再次使用 setDataSource();
让播放器知道要流式传输的 url?
最佳答案
如果您重新启动,那是因为系统终止了您的服务。您将获得一个新的 onCreate
和新的 onStartCommand
(您再次经历整个生命周期)。因此您的音频实例将不一样,但这应该不是问题,因为您可以在 onCreate
中再次设置它。
如果您流式传输的位置是从您的服务外部设置的,您将需要在设置时存储该位置,并在重新创建时再次设置。如果该位置出现在 onStartCommand
Intent 中,您可以使用 FLAG_REDELIVER_INTENT
,以便将您的最后一个 Intent 重新传送给您。如果您走这条路,请记住系统不会无限期地重新传递您的 Intent 。
请记住在 onDestroy
中进行任何必要的清理,当您的服务被系统杀死时,它可能会或可能不会被调用。
关于java - Android:服务 START_STICKY 后 MediaPlayer 会怎样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32256298/
我正在构建一个应用程序,但是在返回 START_STICKY; 行后遇到了一条错误,指出“无法访问代码”;从 if (Config.DEVELOPMENT) { 开始,我不确定如何解决这个问题,以便我
因此,如果我理解正确,START_STICKY 之间的区别和 START_NOT_STICKY是第一个将由系统重新启动,以防它杀死它。 有谁知道当我使用 Process.killProcess(Pro
我希望确保我的服务在后台运行,即使在用户关闭应用程序(从任务管理器或相关应用程序)后也是如此。我正在尝试实现 START_STICKY 但不知道如何正确覆盖 startService 方法以使其正常工
关于使用START_STICKY在 Android 服务中。 官方文档说: if this service's process is killed while it is started (after
我有一个包含长期运行服务的应用程序。我已从该服务的 onStartCommand 方法返回 START_STICKY。现在我想测试 START_STICKY 是否正常工作。那么我如何测试我的服务由于内
Foreground Service 具有非常高的优先级,不太可能被系统杀死,所以在 onStartCommand< 中返回 START_STICKY 有什么意义吗?/? 编辑:这个问题不是关于 ST
我有一个作为网络服务器运行的应用程序。该应用有一项服务是 START_STICKY 我希望该服务始终运行网络服务器(在通知中向用户提供了停止它的选项)。 问题是当我关闭我的应用程序时,服务器会重新启动
我问了一个关于保持服务存活的问题,但我没有找到解决方案,所以我有另一个更简单的问题。 android 文档说如果 android 在低内存状态下返回 onStartCommand 时使用 START_
I have read this answer and it's not useful in my case. 我已经创建了一个简单的服务,它除了记录方法名称外什么都不做。我从我的 Activity
在我的 Android 应用程序中,我有一个服务应该在它被杀死后自动重启。我发现这可以使用 START_STICKY 来完成。 但显然当服务自动重启时, Intent 是null。然而,问题在于 In
我无法理解 android 关于服务的新功能。在 google 文档中,在 oreo 之后,开发人员必须在应用程序处于后台时使用前台服务来启动服务。 我找到了这个描述。 '从 Android O 开始
我正在开发一款播放音乐的 Android 应用。 到目前为止,我已经从负责播放音乐的服务的 onStartCommand 返回了 START_STICKY,因为 Eclipse 中的工具提示指出:“此
在我的服务中,我已返回 START_STICKY 以使我的 Service 在我终止应用程序后再次重启。 我已经测试过,它可以在设备 Samsung、Sony、LG 中使用,但在 Xiaomi 中无法
我见过许多 android 服务示例,其中返回 START_STICKY 用于在启动时启动应用程序,但无论如何我可以对 IntentService 使用相同的示例。我知道 Service 方法在主 U
我的应用程序使用第三方库,该库启动了 START_STICKY 服务。所以即使应用被销毁,服务被杀死,它也会自动重启。 我的问题是,有什么方法可以像更改应用程序一样更改此服务生命周期吗?服务在应用启动
我希望 android 应用程序运行后台服务,每分钟执行一次 HTTP 请求,并在服务器返回特定代码时显示通知。 我这样做了,并将服务器标记为 START_STICKY 以将其保存在内存中。但是几天后
我需要让我的服务始终在后台运行。并使用“startService()”函数启动我的服务。无论应用程序的状态如何,我都不想重新启动服务。 这是我的观察。 START_STICKY > 如果应用程序启动,
我在应用程序中使用服务来监听用户按下他/她的电源按钮的次数。该实现在所有设备上运行良好。但是当我在 Android Kitkat 上测试该应用时,我发现了一些问题。 一旦我将应用程序从最近使用的应用程
START_STICKY 和有什么区别?和 START_NOT_STICKY在android中实现服务时?谁能指出一些标准的例子..? 最佳答案 这两个代码仅在手机内存不足并在服务完成执行之前终止服务
不知何故,我很难解析 official description START_STICKY 标志: Constant to return from onStartCommand(Intent, int,
我是一名优秀的程序员,十分优秀!