From 48ce359d2d6a493fd0e6b4e2c16b03eed7a0040e Mon Sep 17 00:00:00 2001 From: Tamim Hossain <132823494+CodeWithTamim@users.noreply.github.com> Date: Sat, 10 Aug 2024 17:41:37 +0600 Subject: [PATCH] Fix: Refactor to use lazy initialization for binding (#3453) Refactor binding initialization to use lazy delegation Replaced direct initialization of binding with lazy initialization to improve performance and resource management. This change defers the creation of the binding object until it is actually needed, which can reduce memory usage and improve efficiency. - Updated binding initialization to use lazy - Ensured proper access and lifecycle handling This update ensures that the binding is initialized only when required, leading to a more efficient use of resources. --- .../src/main/kotlin/com/v2ray/ang/ui/AboutActivity.kt | 6 ++---- .../src/main/kotlin/com/v2ray/ang/ui/LogcatActivity.kt | 8 ++++---- .../app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt | 9 +++++---- .../main/kotlin/com/v2ray/ang/ui/PerAppProxyActivity.kt | 8 ++++---- .../kotlin/com/v2ray/ang/ui/RoutingSettingsActivity.kt | 6 ++---- .../kotlin/com/v2ray/ang/ui/RoutingSettingsFragment.kt | 3 +-- .../com/v2ray/ang/ui/ServerCustomConfigActivity.kt | 6 ++---- .../src/main/kotlin/com/v2ray/ang/ui/SubEditActivity.kt | 6 ++---- .../main/kotlin/com/v2ray/ang/ui/SubSettingActivity.kt | 6 ++---- .../src/main/kotlin/com/v2ray/ang/ui/TaskerActivity.kt | 6 ++---- .../main/kotlin/com/v2ray/ang/ui/UrlSchemeActivity.kt | 6 ++---- .../main/kotlin/com/v2ray/ang/ui/UserAssetActivity.kt | 6 ++---- .../main/kotlin/com/v2ray/ang/ui/UserAssetUrlActivity.kt | 6 ++---- 13 files changed, 32 insertions(+), 50 deletions(-) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/AboutActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/AboutActivity.kt index f3bb37b3..04a3c3bf 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/AboutActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/AboutActivity.kt @@ -21,14 +21,12 @@ import java.text.SimpleDateFormat import java.util.Locale class AboutActivity : BaseActivity() { - private lateinit var binding: ActivityAboutBinding + private val binding by lazy {ActivityAboutBinding.inflate(layoutInflater)} private val extDir by lazy { File(Utils.backupPath(this)) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - binding = ActivityAboutBinding.inflate(layoutInflater) - val view = binding.root - setContentView(view) + setContentView(binding.root) title = getString(R.string.title_about) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/LogcatActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/LogcatActivity.kt index 06bc3e90..bd35637e 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/LogcatActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/LogcatActivity.kt @@ -21,13 +21,13 @@ import java.io.IOException import java.util.LinkedHashSet class LogcatActivity : BaseActivity() { - private lateinit var binding: ActivityLogcatBinding + private val binding by lazy { + ActivityLogcatBinding.inflate(layoutInflater) + } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - binding = ActivityLogcatBinding.inflate(layoutInflater) - val view = binding.root - setContentView(view) + setContentView(binding.root) title = getString(R.string.title_logcat) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt index 8be75d45..5779615d 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt @@ -30,6 +30,7 @@ import com.tbruyelle.rxpermissions.RxPermissions import com.tencent.mmkv.MMKV import com.v2ray.ang.AppConfig import com.v2ray.ang.R +import com.v2ray.ang.databinding.ActivityLogcatBinding import com.v2ray.ang.databinding.ActivityMainBinding import com.v2ray.ang.databinding.LayoutProgressBinding import com.v2ray.ang.dto.EConfigType @@ -50,7 +51,9 @@ import rx.android.schedulers.AndroidSchedulers import java.util.concurrent.TimeUnit class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedListener { - private lateinit var binding: ActivityMainBinding + private val binding by lazy { + ActivityMainBinding.inflate(layoutInflater) + } private val adapter by lazy { MainRecyclerAdapter(this) } private val mainStorage by lazy { MMKV.mmkvWithID(MmkvManager.ID_MAIN, MMKV.MULTI_PROCESS_MODE) } @@ -82,9 +85,7 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - binding = ActivityMainBinding.inflate(layoutInflater) - val view = binding.root - setContentView(view) + setContentView(binding.root) title = getString(R.string.title_server) setSupportActionBar(binding.toolbar) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/PerAppProxyActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/PerAppProxyActivity.kt index 86949c33..1e2419bb 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/PerAppProxyActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/PerAppProxyActivity.kt @@ -28,7 +28,9 @@ import rx.schedulers.Schedulers import java.text.Collator class PerAppProxyActivity : BaseActivity() { - private lateinit var binding: ActivityBypassListBinding + private val binding by lazy { + ActivityBypassListBinding.inflate(layoutInflater) + } private var adapter: PerAppProxyAdapter? = null private var appsAll: List? = null @@ -36,9 +38,7 @@ class PerAppProxyActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - binding = ActivityBypassListBinding.inflate(layoutInflater) - val view = binding.root - setContentView(view) + setContentView(binding.root) val dividerItemDecoration = DividerItemDecoration(this, LinearLayoutManager.VERTICAL) binding.recyclerView.addItemDecoration(dividerItemDecoration) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/RoutingSettingsActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/RoutingSettingsActivity.kt index 194c397e..9eab7935 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/RoutingSettingsActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/RoutingSettingsActivity.kt @@ -8,7 +8,7 @@ import com.v2ray.ang.AppConfig import com.v2ray.ang.databinding.ActivityRoutingSettingsBinding class RoutingSettingsActivity : BaseActivity() { - private lateinit var binding: ActivityRoutingSettingsBinding + private val binding by lazy { ActivityRoutingSettingsBinding.inflate(layoutInflater) } private val titles: Array by lazy { resources.getStringArray(R.array.routing_tag) @@ -16,9 +16,7 @@ class RoutingSettingsActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - binding = ActivityRoutingSettingsBinding.inflate(layoutInflater) - val view = binding.root - setContentView(view) + setContentView(binding.root) title = getString(R.string.title_pref_routing_custom) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/RoutingSettingsFragment.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/RoutingSettingsFragment.kt index fda272b4..657c8f0a 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/RoutingSettingsFragment.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/RoutingSettingsFragment.kt @@ -23,7 +23,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch class RoutingSettingsFragment : Fragment() { - private lateinit var binding: FragmentRoutingSettingsBinding + private val binding by lazy { FragmentRoutingSettingsBinding.inflate(layoutInflater) } companion object { private const val routing_arg = "routing_arg" } @@ -33,7 +33,6 @@ class RoutingSettingsFragment : Fragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { // Inflate the layout for this fragment - binding = FragmentRoutingSettingsBinding.inflate(layoutInflater) return binding.root// inflater.inflate(R.layout.fragment_routing_settings, container, false) } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerCustomConfigActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerCustomConfigActivity.kt index 5fdb57f1..1bd7275f 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerCustomConfigActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerCustomConfigActivity.kt @@ -21,7 +21,7 @@ import com.v2ray.ang.util.Utils import me.drakeet.support.toast.ToastCompat class ServerCustomConfigActivity : BaseActivity() { - private lateinit var binding: ActivityServerCustomConfigBinding + private val binding by lazy { ActivityServerCustomConfigBinding.inflate(layoutInflater) } private val mainStorage by lazy { MMKV.mmkvWithID(MmkvManager.ID_MAIN, MMKV.MULTI_PROCESS_MODE) } private val serverRawStorage by lazy { MMKV.mmkvWithID(MmkvManager.ID_SERVER_RAW, MMKV.MULTI_PROCESS_MODE) } @@ -34,9 +34,7 @@ class ServerCustomConfigActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - binding = ActivityServerCustomConfigBinding.inflate(layoutInflater) - val view = binding.root - setContentView(view) + setContentView(binding.root) title = getString(R.string.title_server) if (!Utils.getDarkModeStatus(this)) { diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubEditActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubEditActivity.kt index 21037557..8106aedb 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubEditActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubEditActivity.kt @@ -23,7 +23,7 @@ import com.v2ray.ang.util.Utils import java.util.concurrent.TimeUnit class SubEditActivity : BaseActivity() { - private lateinit var binding: ActivitySubEditBinding + private val binding by lazy {ActivitySubEditBinding.inflate(layoutInflater)} var del_config: MenuItem? = null var save_config: MenuItem? = null @@ -33,9 +33,7 @@ class SubEditActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - binding = ActivitySubEditBinding.inflate(layoutInflater) - val view = binding.root - setContentView(view) + setContentView(binding.root) title = getString(R.string.title_sub_setting) val json = subStorage?.decodeString(editSubId) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingActivity.kt index 09aca34f..29d98900 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingActivity.kt @@ -19,16 +19,14 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.launch class SubSettingActivity : BaseActivity() { - private lateinit var binding: ActivitySubSettingBinding + private val binding by lazy { ActivitySubSettingBinding.inflate(layoutInflater) } var subscriptions: List> = listOf() private val adapter by lazy { SubSettingRecyclerAdapter(this) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - binding = ActivitySubSettingBinding.inflate(layoutInflater) - val view = binding.root - setContentView(view) + setContentView(binding.root) title = getString(R.string.title_sub_setting) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/TaskerActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/TaskerActivity.kt index 11f7a601..872607d3 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/TaskerActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/TaskerActivity.kt @@ -17,7 +17,7 @@ import com.v2ray.ang.databinding.ActivityTaskerBinding import com.v2ray.ang.util.MmkvManager class TaskerActivity : BaseActivity() { - private lateinit var binding: ActivityTaskerBinding + private val binding by lazy { ActivityTaskerBinding.inflate(layoutInflater) } private var listview: ListView? = null private var lstData: ArrayList = ArrayList() @@ -27,9 +27,7 @@ class TaskerActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - binding = ActivityTaskerBinding.inflate(layoutInflater) - val view = binding.root - setContentView(view) + setContentView(binding.root) //add def value lstData.add("Default") diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UrlSchemeActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UrlSchemeActivity.kt index 3668fa71..c7b71e59 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UrlSchemeActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UrlSchemeActivity.kt @@ -11,13 +11,11 @@ import com.v2ray.ang.util.AngConfigManager import java.net.URLDecoder class UrlSchemeActivity : BaseActivity() { - private lateinit var binding: ActivityLogcatBinding + private val binding by lazy { ActivityLogcatBinding.inflate(layoutInflater) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - binding = ActivityLogcatBinding.inflate(layoutInflater) - val view = binding.root - setContentView(view) + setContentView(binding.root) try { intent.apply { diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UserAssetActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UserAssetActivity.kt index 3da7426f..d353de40 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UserAssetActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UserAssetActivity.kt @@ -39,7 +39,7 @@ import java.text.DateFormat import java.util.* class UserAssetActivity : BaseActivity() { - private lateinit var binding: ActivitySubSettingBinding + private val binding by lazy { ActivitySubSettingBinding.inflate(layoutInflater) } private val settingsStorage by lazy { MMKV.mmkvWithID(MmkvManager.ID_SETTING, MMKV.MULTI_PROCESS_MODE) } private val assetStorage by lazy { MMKV.mmkvWithID(MmkvManager.ID_ASSET, MMKV.MULTI_PROCESS_MODE) } @@ -49,9 +49,7 @@ class UserAssetActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - binding = ActivitySubSettingBinding.inflate(layoutInflater) - val view = binding.root - setContentView(view) + setContentView(binding.root) title = getString(R.string.title_user_asset_setting) binding.recyclerView.setHasFixedSize(true) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UserAssetUrlActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UserAssetUrlActivity.kt index 48404d31..1d5d66f5 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UserAssetUrlActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UserAssetUrlActivity.kt @@ -16,7 +16,7 @@ import com.v2ray.ang.util.Utils import java.io.File class UserAssetUrlActivity : BaseActivity() { - private lateinit var binding: ActivityUserAssetUrlBinding + private val binding by lazy { ActivityUserAssetUrlBinding.inflate(layoutInflater) } var del_config: MenuItem? = null var save_config: MenuItem? = null @@ -27,9 +27,7 @@ class UserAssetUrlActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - binding = ActivityUserAssetUrlBinding.inflate(layoutInflater) - val view = binding.root - setContentView(view) + setContentView(binding.root) title = getString(R.string.title_user_asset_add_url) val json = assetStorage?.decodeString(editAssetId)