Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Android服务内部启动的单例实例是否可以作为服务使用?_Android_Android Service - Fatal编程技术网

从Android服务内部启动的单例实例是否可以作为服务使用?

从Android服务内部启动的单例实例是否可以作为服务使用?,android,android-service,Android,Android Service,我的Android应用程序上有一个单例结构,用于在不同类之间共享数据: public class DataHandler { public DataHandler() { } private static DataHandler instance = null; public static DataHandler getInstance() { if (instance == null) { instance = n

我的Android应用程序上有一个单例结构,用于在不同类之间共享数据:

public class DataHandler {

    public DataHandler() {

    }

    private static DataHandler instance = null;

    public static DataHandler getInstance() {
        if (instance == null) {
            instance = new DataHandler();
        }
        return instance;
    }

}

我知道,即使这个单例实例是静态的,在我的应用程序在后台运行一段时间后(出于内存管理的原因),Android也会杀死它。我还知道Android上的服务可以在后台运行不确定的时间。考虑到singleton的静态实例是在我们首次从它调用方法时创建的,我的疑问是:首先从服务类内部启动的singleton类的实例是否将作为应用程序上的服务工作?(当我的应用程序在后台运行时,不会被Android杀死)

否。当你的应用程序被杀死时,它被杀死。它的所有部分都被杀死了

在旧版本的Android中,操作系统意识到您正在运行一项服务,这使得它不太可能杀死您的应用程序(就像当您的应用程序的某个活动当前可见时,它不太可能被杀死一样)。不过,它只在服务(活动)运行时起作用


现代安卓有更多的内存可供使用,应用程序可以运行很长时间(几天),即使它们既不运行服务也不运行可见的活动。不过,您不能指望内存中的数据。如果你需要,坚持下去。

我明白了。。。但是当你说只要服务还在运行,它就会工作。这是否意味着当我的服务运行时,singleton将仍然存在?即使应用程序的主要活动被杀死,Android也不会一块一块地杀死应用程序。在应用程序中,它的内存管理(垃圾收集)规则与任何其他Java相同:如果有对singleton的引用,它将不会被GCed。您的singleton有一个静态引用,因此GC不会收集它。