- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
调用有什么区别stopSelf()
, stopSelf(int)
或 stopService(new Intent(this,MyServiceClass.class))
在 onStartCommand()
内?
例如,如果我以这种方式启动相同的服务两次:
...
Intent myIntent1 = new Intent(AndroidAlarmService.this, MyAlarmService.class);
myIntent1.putExtra("test", 1);
Intent myIntent2 = new Intent(AndroidAlarmService.this, MyAlarmService.class);
myIntent2.putExtra("test", 2);
startService(myIntent1);
startService(myIntent2);
...
并以这种方式实现onStartCommand:
public int onStartCommand(Intent intent, int flags, int startId)
{
Toast.makeText(this, "onStartCommand called "+intent.getIntExtra("test", 0), Toast.LENGTH_LONG).show();
stopService(new Intent(this,MyAlarmService.class));
return START_NOT_STICKY;
}
这三种方法的行为完全相同,即 onDestroy 只有在 onStartCommand 执行两次后才会被调用。
最佳答案
希望对你有帮助:
已启动的服务必须管理自己的生命周期。也就是说,系统不会停止或销毁服务,除非它必须恢复系统内存并且服务在 onStartCommand() 返回后继续运行。因此,该服务必须通过调用 stopSelf() 来停止自己,或者另一个组件可以通过调用 stopService() 来停止它。
一旦使用 stopSelf() 或 stopService() 请求停止,系统会尽快销毁服务。
但是,如果您的服务同时处理对 onStartCommand() 的多个请求,那么您不应在处理完启动请求后停止服务,因为您可能已经收到了新的启动请求(在结束时停止)第一个请求将终止第二个请求)。为避免此问题,您可以使用 stopSelf(int) 来确保您停止服务的请求始终基于最近的启动请求。
也就是说,当你调用 stopSelf(int) 时,你传递的是你的停止请求对应的启动请求的 ID(传递给 onStartCommand() 的 startId)。那么如果服务在你能够调用 stopSelf(int) 之前收到一个新的启动请求,那么 ID 将不匹配并且服务不会停止。
关于android - stopSelf() vs stopSelf(int) vs stopService(Intent),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22485298/
我正在学习前台服务,并创建了一个通知 channel 以确保它保持服务处于 Activity 状态。问题是,即使我调用 stopService 方法,应用程序也不会停止。通知确实消失了,但应用程序仍然
这是我运行的代码,用于停止在后台运行的服务。如果我按下停止按钮,服务就会继续运行。来自 onDestroy 函数的 toast 运行但服务不会停止。有什么帮助吗? public void onC
将 stopService() 停止作为 foreground service 运行的服务?它似乎胜过前台服务的重要性,但也“感觉”到它胜过前台服务的重要性。 最佳答案 已确认:是 - 正在运行 st
当调用 Activity 退出时,我从调用类调用了 stopService() 方法,服务没有停止。它一直在后台运行,因此可能会给最终用户带来麻烦。任何帮助将不胜感激.. 代码: public cla
我正在学习如何处理服务..我创建了一个小示例。 mainActivity 向服务发送一个整数,服务使用该整数作为循环中的最大迭代,如下面的代码所示。 问题是当我调用 stopService(inten
我有一项服务,每 15 分钟检查一次 Web API 以获取一些信息,然后会收到一条通知。现在,当我单击注销按钮时,我正在执行 stopService 来停止正在运行的服务。我在我的设置中运行的应用程
我有一个后台服务,当在 UI 上按下相应的按钮(“连接”和“分别断开连接”)。 我在服务停止时执行大量清理操作,我将这些操作放在服务的 onDestroy() 中,假设只要 stopService()
我知道以前有人问过很多关于如何停止服务的问题,但我没有找到解决我的特定问题的问题。 在我的应用程序中,我有许多与一个中央服务通信的 Activity 。对于每个 Activity ,我在它们的 onR
我有一个 android 服务,即使 Activity 关闭也需要运行! 如果屏幕OFF,该服务不需要做任何事情。 如果屏幕ON,服务开始工作! 所以我的问题是,最好是删除所有处理程序回调(保持服务)
我使用唯一的 id 值多次启动 IntentService。当我重新创建 Intent 并使用它在当前 IntentService 上调用 stopService 时,整个 IntentService
我尝试使用 TimerTask 从服务器 api 下载数据,任务在后台应用程序中循环。 我有一个服务类: public class RequestNewInvoice extends Service
我有一个奇怪的问题。我正在使用 Apache 服务来配置我的 Windows 服务。根据 Procrun,我的批处理文件应该配置为启动和停止服务。我的问题是当我启动应用程序时,会执行启动服务。但不是停
我正在使用以下语句停止在后台运行的下载服务(扩展 IntentService): context.stopService(intent); 但是这个语句并不是立即调用服务的onDestory(
我有一个可以通过多种方式停止的服务。每当我调用 stopService(Intent) 时,我都会传递一个带有一些额外内容的 Intent 。您如何检索这些额外内容? 谢谢。 最佳答案 您需要覆盖 o
我在停止播放音频文件的服务时遇到了很大的问题。我想在播放另一个文件之前停止当前服务。 Activity : public void playTrack(View view){ In
我的 android APP 上有一个后台服务,它正在获取我的 GPS 位置并将其发送到远程数据库。它工作正常。 问题是当我想停止服务时......它不会停止:S。 logcat 上也没有出现异常或错
我目前有一个服务,当我启动它时运行良好,但是当我尝试使用 stopService 方法停止它时,它的 onDestroy 方法不会被调用。 这是我用来尝试停止服务的代码 stop_Scan_Butto
Android 编程新手。你能告诉我如何将 View 作为参数传递吗? public class MainActivity extends ActionBarActivity { ... pu
使用服务上传图像 在我的应用程序中,我正在将图像上传到服务器,我使用后台服务来执行此操作,上传是在服务中的另一个线程中执行的。我已经读到,服务在 UI 线程上运行,服务中的线程是另一个进程,我需要的是
您好,我正在开发一个应用程序,我需要将我的 stopService();在 AlertDialog.Builder 的 PositiveButton 中,但出现错误,我的代码是: ....其他代码 .
我是一名优秀的程序员,十分优秀!