皮皮网

【源码编辑器做题讲解】【诊所源码asp】【postman的源码】sharedpreference源码

来源:maskrcnn源码解析 时间:2024-11-24 22:27:17

1.App多语言实现
2.安卓preference和view的区别
3.深入底层原理,源码Android 11.0 Framework解析手册,源码最新开源

sharedpreference源码

App多语言实现

        项目中遇到 切换app语言 的需求,要求在“简体中文”和“English”两种语言之间切换部分控件的语言文案,不受系统语言切换的影响。

        TODO 切换系统Configuration设置源码分析

        TODO Android资源管理机制

        按照Android的资源管理方式,我们需要在res目录下建立两个values目录,其中values是默认的路径,values-en是英文资源的目录。

        默认情况下,app启动会根据系统的设置加载对应的资源,系统切换了语言设置,app也会更新设置,所以这样不能完全满足我们的需求。

        我们不想要app随着系统语言的改变而改变,而是保持用户上一次的选择。默认安卓系统不会保留app的语言设置,我们需要本地记录一下用户的选择,在app重新启动的时候加载之前保存的语言资源。存储用户的选择比较容易,放到SharedPreference里即可。然后在app重新启动的时候,我们需要手动更新下app的Application、Activity、Fragment和Service收到的配置信息。

        以Activity为例,我们在基类的attachBaseContext方法中更新保存有config信息的Context对象:

        ConfigurationUtil.attachBaseContext(newBase) 方法中更新newBase对象,使其中保存的Locale为我们自定义,而非系统的。当Activity被attach到window时,调用到此方法,便会加载我们想要的资源。这时如果手动修改了系统语言设置,然后从任务历史中切回我们的app时,栈中的所有Activity会被系统依照展示次序依次销毁重建(栈顶被销毁重建,退出到前一个页面时,前一个页面会被销毁重建)。由于Activity被销毁重建,会重新执行了生命周期方法,Activity的attachBaseContext方法也就会被重新执行到,所以系统的语言修改后,我们仍然可以正确地加载到我们自己设置的语言资源,所以从表面上看并没有受到系统修改的影响。

        通常官方也是建议我们重启所有Activity的,这么做会销毁旧的资源数据,重新加载新的,安全方便。

        官方描述:

        如果我们不希望在系统语言发生变化时重启Activity,需要在Manifest.xml文件中配置: android:configChanges="locale" 即可。

        这样做之后我们会在重新回到Activity的时候,进入回调方法 public void onConfigurationChanged(Configuration newConfig) { ... 中去执行。其参数newConfig对象代表所有当前配置,而不仅仅是已经变更的配置。

        需要注意:当我们修改系统语言设置后,系统会更新当前手机中所有正在运行的进程里的所有组件(分析在开篇的链接里有说明),所以这种情况下再次回到Activity,如果我们刷新UI,UI会使用系统的设置加载相应的资源文件。比如,

        假设我们app设置为了简体中文(我们在Application中保存相应的flag,来判断系统的语言设置是否和app的设置一致或者发生了变化),如果系统由简体中文修改为了English,如果我们不做上述处理,刷新UI会加载英文资源。

        这并不是我们想要的效果,所以我们需要在onConfigurationChanged回调中,再次更新Context中的Resources设置。做法如下:

        上述方案并非完美结局问题,onConfigurationChanged方法调用之前getResource()有可能就会被调用多次,时序问题,加载出依据系统的语言设置的资源文件。(。>︿<)_θ,所以会有4的兜底方案。

        TODO 切换语言并回到app,然后新建fragment并add,会有资源加载错误情况

        我们在Activity的onConfigurationChanged方法更新过资源,貌似这里没有起作用。有种暴力的方式:

        我们在 getResources() 方法中调用 ConfigurationUtil.updateResources(getResources()); ,但是 getResources() 方法会被多次调用,每次调用会判断一次,并不是特别理想,不过可以及时刷新,再未找到更好的方法前也算是一种兜底的方案。

        在切换的Activity中,我们最好重启一下所有的app,执行下方方法后,重新打开singleTask的MainActivity...

安卓preference和view的区别

       Android中,persistent于preferencescreen中对布局界面的可控和高效有帮助,具体体现在:1、在Android系统源码中,绝大多数应用程序的UI布局采用了Preference的布局结构,而不是平时在模拟器中构建应用程序时使用的View布局结构,例如,Setting模块中布局2、FMRadio应用程序中则使用了View布局结构(可能是该应用程序。归根到底,Preference布局结构和View的布局结构本质上还是大同小异;3、Preference的优点在于布局界面的可控性和高效率以及可存储值的简洁性(每个PreferenPreferencece存储在相对应下的SharedPreference文件夹下)。

深入底层原理,源码Android .0 Framework解析手册,源码源码编辑器做题讲解最新开源

       在当前的源码Android开发领域,技术深度的源码体现主要依赖于对Android系统底层原理的理解。这不仅使我们能够深入掌握应用程序的源码行为,解决复杂问题,源码进行精准性能优化,源码而且还能在应用层面实现更多的源码创新。Android的源码诊所源码asp底层结构主要由Framework构成,这是源码所有开发框架和系统设计的基础。如今,源码各大公司面试时,源码对Framework相关知识的源码考核成为了常规项目,如进程通信、postman的源码Handler的执行原理、Looper与线程间的关系、UI更新机制、ThreadLocal原理及其应用、SharedPreference的网站别人源码工作机制与注意事项、Intent的原理、作用及参数传递等。

       对于上述问题,你是否能够回答?为了帮助你更好地理解和掌握这些核心原理,我们整理了一份详细的c+源码《Android Framework源码》笔记,旨在用三天时间让你吃透Android Framework的精髓,为你的职业发展增添一份保障。此笔记不仅涵盖了系统启动流程、跨进程通信、Handler解析、AMS与WMS源码、Surface管理、PKMS、InputManagerService与DisplayManagerService等关键模块,还提供了Android.0版本的SurfaceFlinger源码解析,全方位覆盖Framework的核心知识点。

       点击下方链接,即可免费获取这份详细笔记。掌握这些知识,将使你成为真正的高级Android开发者。技术的探索之路永无止境,对每一行代码、每个工具负责,深入挖掘其底层原理,是提升技术层次的关键。让我们一起在这个充满挑战与机遇的Android架构师之路上,不断前行。