我有一种方法可以像共享优先级一样写数据,
private static void save(final Context context, final String key, final Object value) {
new Thread(new Runnable() {
@Override
public void run() {
SharedPreferences sharedPref = context.createDeviceProtectedStorageContext().getSharedPreferences(MY_SHARED_PREF, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
if (value instanceof Integer) {
editor.putInt(key, (Integer) value);
} else if (value instanceof Long) {
editor.putLong(key, (Long) value);
}
editor.apply();
}
}).start();
}
决定要拥有多少个线程的另一个考虑因素是, 线程不是免费的:它们占用内存。每个线程的成本最低 64k的内存。这会在安装的许多应用程序中迅速相加 在设备上,尤其是在调用堆栈增长的情况下 显着。
它鼓励创建单个线程,例如Handler线程,并使用它来执行后台工作。
我的想法是,保存操作可能需要一些时间,因此计划将其保存在后台线程中,但是对于以下问题,我没有明确的答案,这阻止了我执行此操作。
当调用方存在此方法时,将释放为该线程分配的资源吗?
如果对该save
util方法的调用过多,会发生什么?创建线程会产生开销吗?
在我的情况下,我不想与UI线程通信,也不想与另一个线程通信。我唯一的目的是在一个单独的线程中花一些时间(不是长时间运行)来消耗任务。这里最好使用线程创建或Handler或Async task?
有人请帮助我理解这一点。
线程完成后,将释放资源。就您而言,在editor.apply()完成工作之后。通常,此操作将在save()方法返回之后(或更晚)进行。