【问题标题】:Android: how to intercept when a Service runs for the first timeAndroid:第一次运行Service时如何拦截
【发布时间】:2013-05-27 15:40:18
【问题描述】:

您好,感谢您的帮助。

我有以下情况。

我有一个 AlarmManager,它每 1 分钟触发一次服务。

我必须仅在第一次启动该服务时执行该服务中的特定方法。而不是在随后启动该服务时。

我不认为共享偏好是一种解决方案,因为如果手机关机,它们会持续存在。

请问我该如何解决??

谢谢你的建议!!!

【问题讨论】:

  • 我将向警报管理器添加一个服务或广播,该服务或广播将首先触发一次,以重置共享首选项的内容。或者,也许您可​​以写入 /tmp 中的文件,该文件应在重新启动时删除

标签: java android service alarmmanager


【解决方案1】:

尝试从应用程序继承并存储在其中..

public class YourApp extends Application {

private static boolean mFirstRun = false;

public static boolean getFirstRun() { return mFirstRun; }
public static void clearFirstRun() { mFirstRun = false; }

来自您的服务:

if (YourApp.getFirstRun()) 
{
   clearFirstRun();
   // run first time code
}

【讨论】:

    【解决方案2】:

    您可以在 onCreate() 中调用它。请参阅官方文档中的here。它说:

    Called by the system when the service is first created. Do not call this method directly.
    供您参考,您可以查看问题When does Application's onCreate() method get called? 和If android restarts a Service is onCreate called again?

    【讨论】:

    • 但它可以再次创建,即使它一直运行。
    • 是的,如果它在某个时候被杀死然后重新启动。所以,即使它被杀死你不想调用你的代码?如果应用程序的整个生命周期,您只想调用一次。
    猜你喜欢
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 2015-12-04
    • 1970-01-01
    • 2017-10-26
    • 2022-09-10
    • 1970-01-01
    相关资源
    最近更新 更多