何时新清除的线程将被android清除?

问题描述 投票:1回答:1

我有一种方法可以像共享优先级一样写数据,

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();
 }

[Android documentation说,

决定要拥有多少个线程的另一个考虑因素是, 线程不是免费的:它们占用内存。每个线程的成本最低 64k的内存。这会在安装的许多应用程序中迅速相加 在设备上,尤其是在调用堆栈增长的情况下 显着。

它鼓励创建单个线程,例如Handler线程,并使用它来执行后台工作。

我的想法是,保存操作可能需要一些时间,因此计划将其保存在后台线程中,但是对于以下问题,我没有明确的答案,这阻止了我执行此操作。

  1. 当调用方存在此方法时,将释放为该线程分配的资源吗?

  2. 如果对该save util方法的调用过多,会发生什么?创建线程会产生开销吗?

  3. 在我的情况下,我不想与UI线程通信,也不想与另一个线程通信。我唯一的目的是在一个单独的线程中花一些时间(不是长时间运行)来消耗任务。这里最好使用线程创建或Handler或Async task

有人请帮助我理解这一点。

java android multithreading asynchronous handler
1个回答
1
投票
  1. 线程完成后,将释放资源。就您而言,在editor.apply()完成工作之后。通常,此操作将在save()方法返回之后(或更晚)进行。

© www.soinside.com 2019 - 2024. All rights reserved.