Android 应用程序 onCreate 调用了两次 AppWidget



我有使用RemoteService的AppWidget。我假设这会导致我的应用程序onCreate被调用,即使我的应用程序已经在运行,因为它是从另一个进程启动的。

问题是,我在onCreate中初始化了一些单例,如果您尝试再次初始化它们,它们会抛出IllegalStateExceptions。我可以捕获这些内容,但是单例将具有其他应用程序的上下文。我应该在这里做什么?

我不确定我是否理解你的问题。由于您现在有两个进程,因此每个进程将保存自己的类实例,包括单例实例。但在这种情况下,您将无法初始化单例两次,并且不应抛出非法状态异常。

唯一的方法(据我所知(您可以初始化一次单例两次是尝试在 Application.onCreate(( 中启动子进程两次。如果是这样,解决问题就是防止进程启动两次。

由于进程名称是预先确定的,因此我们可以使用它们来标识当前代码正在运行的进程。以下方法可用于确定我们是否在应用程序主进程下运行:

/**
 * check if current process is the application's main process
 */
public boolean isMainProcess(Context context) {
    String currentProcessName = null;
    int currentPid = android.os.Process.myPid();
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningAppProcessInfo> runningApps = am.getRunningAppProcesses();
    if (runningApps != null) {
        for (ActivityManager.RunningAppProcessInfo procInfo : runningApps) {
            if (procInfo.pid == currentPid) {
                currentProcessName = procInfo.processName;
            }
        }
    }
    return context.getApplicationInfo().packageName.equals(currentProcessName);
}

上面的代码假定进程名称未在 AndroidManifest.xml 中显式给出。也就是说,进程名称就是包名称。

曾经使用此代码来检查我是否应该在Application.onCreate((方法上启动子进程:仅在isMainProcess((返回true时才启动子进程。对我有用。

再次,不确定我是否完全理解您的问题。希望这有帮助。

相关内容

  • 没有找到相关文章

最新更新