<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[lixintyw的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/lixintyw</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; lixintyw]]></copyright><item><title><![CDATA[Android在attachBaseContext中修改DisplayMetrics 代码]]></title><link>https://blog.youkuaiyun.com/lixintyw/article/details/129586521</link><guid>https://blog.youkuaiyun.com/lixintyw/article/details/129586521</guid><author>lixintyw</author><pubDate>Thu, 16 Mar 2023 14:44:39 +0800</pubDate><description><![CDATA[对象，这意味着我们的应用程序将以 1.5 倍的比例缩放以适应设备屏幕密度。，这是一种中等密度的屏幕密度，可以确保应用程序在不同的设备上都能够正确地显示。在这个例子中，我们设置了一个缩放因子为 1.5 的自定义。对象，然后根据需要创建一个自定义的。在上述代码中，我们首先通过。对象，并将其替换系统的。]]></description><category></category></item><item><title><![CDATA[Android attachBaseContext作用]]></title><link>https://blog.youkuaiyun.com/lixintyw/article/details/129586107</link><guid>https://blog.youkuaiyun.com/lixintyw/article/details/129586107</guid><author>lixintyw</author><pubDate>Thu, 16 Mar 2023 14:31:47 +0800</pubDate><description><![CDATA[方法是 Android 应用程序中非常重要的一个回调方法，通过重写该方法，开发人员可以在应用程序启动时进行一些必要的初始化操作，以确保应用程序的正确运行。通常，开发人员会在这个方法中执行一些初始化操作，如创建全局对象、设置默认语言等。配置应用程序的一些基本参数，例如设置应用程序的主题、字体大小、默认语言等。初始化全局变量和对象，例如创建数据库、设置全局的异常处理器等。方法之前被调用，其作用是向应用程序的。对象添加一些额外的功能和信息，如修改。方法中，必须调用父类的方法。方法中，必须调用父类的。]]></description><category></category></item><item><title><![CDATA[Android修改context.getResources().getDisplayMetrics()对应多分辨率替换方案]]></title><link>https://blog.youkuaiyun.com/lixintyw/article/details/129585850</link><guid>https://blog.youkuaiyun.com/lixintyw/article/details/129585850</guid><author>lixintyw</author><pubDate>Thu, 16 Mar 2023 14:25:13 +0800</pubDate><description><![CDATA[这样，在加载布局文件时，系统会自动根据设备的屏幕密度来选择相应的布局文件，从而实现不同屏幕密度的适配。但是需要注意的是，在适配不同屏幕密度时，还需要考虑到不同屏幕尺寸的适配，以确保应用程序在各种设备上都能够正常运行。同样的，系统会自动根据设备的屏幕密度来选择相应的资源文件，从而实现不同屏幕密度的适配。可以根据不同的设备分辨率，提供不同的布局文件，这样可以避免修改DisplayMetrics的值所带来的风险。除了布局文件外，还可以根据不同的设备分辨率，提供不同的资源文件，如图片、颜色、尺寸等。]]></description><category></category></item><item><title><![CDATA[Android修改context.getResources().getDisplayMetrics()对应多分辨率风险点]]></title><link>https://blog.youkuaiyun.com/lixintyw/article/details/129585739</link><guid>https://blog.youkuaiyun.com/lixintyw/article/details/129585739</guid><author>lixintyw</author><pubDate>Thu, 16 Mar 2023 14:22:00 +0800</pubDate><description><![CDATA[通过修改DisplayMetrics的值，可能会导致应用程序的布局发生变化，从而影响到应用程序的用户体验。的值来适配不同分辨率的设备，但是需要注意风险点，确保修改后的应用程序在各种设备上都能够正常运行，并尽量避免对系统默认的DisplayMetrics进行修改。通过修改DisplayMetrics的值，可能会导致应用程序的性能问题。的值来适配不同分辨率的设备，但是这种做法并不推荐修改系统默认的DisplayMetrics，因为这可能会影响到整个应用程序的显示效果，并且可能会影响到其他应用程序的显示效果。]]></description><category></category></item><item><title><![CDATA[Android修改DisplayMetrics的方式适配多分辨率代码]]></title><link>https://blog.youkuaiyun.com/lixintyw/article/details/129585523</link><guid>https://blog.youkuaiyun.com/lixintyw/article/details/129585523</guid><author>lixintyw</author><pubDate>Thu, 16 Mar 2023 14:19:27 +0800</pubDate><description><![CDATA[以上示例代码演示了三种不同的方式来适配多分辨率，包括根据宽高比缩放布局、根据屏幕密度缩放布局和使用自定义DisplayMetrics适配。根据实际情况选择适合的方式来实现多分辨率适配。]]></description><category></category></item><item><title><![CDATA[Android分辨率适配]]></title><link>https://blog.youkuaiyun.com/lixintyw/article/details/129585374</link><guid>https://blog.youkuaiyun.com/lixintyw/article/details/129585374</guid><author>lixintyw</author><pubDate>Thu, 16 Mar 2023 14:12:19 +0800</pubDate><description><![CDATA[这可以确保布局在不同分辨率的设备上看起来相似。例如，可以创建不同分辨率下的布局文件，将它们放置在不同的文件夹中，以确保在不同的设备上使用正确的布局。缩放位图：使用缩放位图可以确保图像在不同分辨率的设备上都以适当的尺寸呈现。在Android开发中，可以将图像放在不同的文件夹中，以确保在不同的设备上使用正确的图像。动态布局：使用代码编写动态布局，可以确保布局在不同分辨率的设备上以适当的比例进行缩放。综上所述，通过使用相对单位、限制符、缩放位图和动态布局等方法，可以在开发Android应用程序时进行分辨率适配。]]></description><category></category></item><item><title><![CDATA[华为分屏是否会监听DisplayMetrics]]></title><link>https://blog.youkuaiyun.com/lixintyw/article/details/113987561</link><guid>https://blog.youkuaiyun.com/lixintyw/article/details/113987561</guid><author>lixintyw</author><pubDate>Thu, 16 Mar 2023 14:07:26 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[framework学习（1）——源码的角度分析handler（1）]]></title><link>https://blog.youkuaiyun.com/lixintyw/article/details/112748729</link><guid>https://blog.youkuaiyun.com/lixintyw/article/details/112748729</guid><author>lixintyw</author><pubDate>Sun, 17 Jan 2021 18:00:15 +0800</pubDate><description><![CDATA[大前提
Android中更新Ui必须在主线程，在子线程更新Ui会报子线程不能修改UI异常如果任意线程都可以更新UI的话，线程安全问题处理起来会相当麻烦复杂，就会出现页面错乱。所以就规定了Android的是单线程模型，只允许在UI线程更新UI操作。那如果有许多需要耗时的操作都放在UI主线程中执行的话，必然会造成主线程的卡顿，会阻塞掉UI线程，导致手机不再显示或者接受用户新的操作，给用户一种死机的感觉。因此最好的方法是将用户耗时较长的操作放到另一个线程中去，并且用监听者模式来监听操作的完成。
这里handler]]></description><category></category></item><item><title><![CDATA[Android中使用mvvm(三)]]></title><link>https://blog.youkuaiyun.com/lixintyw/article/details/106135863</link><guid>https://blog.youkuaiyun.com/lixintyw/article/details/106135863</guid><author>lixintyw</author><pubDate>Fri, 15 May 2020 15:07:53 +0800</pubDate><description><![CDATA[部分内容学自https://www.jianshu.com/p/fc7d53d32096

基于DataBinding与LiveData的MVVM

在MVP模式下，随着业务逻辑的不断增加，UI也会变得越来的多样化，UI改变多样化势必会造成View层的接口case变多，View的接口类就会变得异常庞大。MVVM的方式完美的解决了MVP模式的这一痛点，它采用双向绑定的机制，实现了UI与数据的绑定操作。仅通过改变数据就可以实现对UI的更新操作。


DataBinding（https://mp.youkuaiyun.com]]></description><category></category></item><item><title><![CDATA[Android中使用mvvm(二)]]></title><link>https://blog.youkuaiyun.com/lixintyw/article/details/106128739</link><guid>https://blog.youkuaiyun.com/lixintyw/article/details/106128739</guid><author>lixintyw</author><pubDate>Thu, 14 May 2020 21:24:57 +0800</pubDate><description><![CDATA[学习自https://www.jianshu.com/p/ef5f8d7d2caa

只设置一次数据，再当数据发生变化时，让视图直接自动变化

方法一、实现BaseObservable接口

用我们操作的VIewModel类型去继承BaseObservable类



将User类继承BaseObservable类后，其实不需要再重写什么方法，只需要1.给之前的get方法添加 "@Bindable"注解。2.给之前的set方法的最后边添加"notifyPropertyChanged(BR.对应的控件id)"]]></description><category></category></item><item><title><![CDATA[Android中使用mvvm]]></title><link>https://blog.youkuaiyun.com/lixintyw/article/details/106128159</link><guid>https://blog.youkuaiyun.com/lixintyw/article/details/106128159</guid><author>lixintyw</author><pubDate>Thu, 14 May 2020 20:38:43 +0800</pubDate><description><![CDATA[使用mvvm

1、让android项目启用dataBinding

使用mvvm，必然会用到android为我们提供的dataBinding支持包

需要在我们正在编写的module中的build.gradle中添加（添加到android {} 内部）


    dataBinding {
        enabled = true
    }

构建一下，就可以使用

2、修改布局文件

使用databinding框架，需要布局文件 按照 「固定的写法」 来编写。


&lt;data&gt;
  ]]></description><category></category></item><item><title><![CDATA[Android 使用AIDL在进程间通信]]></title><link>https://blog.youkuaiyun.com/lixintyw/article/details/105798007</link><guid>https://blog.youkuaiyun.com/lixintyw/article/details/105798007</guid><author>lixintyw</author><pubDate>Mon, 27 Apr 2020 21:28:39 +0800</pubDate><description><![CDATA[这是一种比startService更复杂的启动方式，同时使用这种方式启动的service也能完成更多的事情，比如其他组件可向其发送请求，接受来自它的响应，甚至通过它来进行IPC（Inter-Process Communication）等等。我们通常将绑定它的组件称为客户端，而称它为服务端。如果要创建一个支持绑定的service，我们必须要重写它的onBind()方法。这个方法会返回一个IBinde...]]></description><category></category></item><item><title><![CDATA[Android MVVM框架熟悉]]></title><link>https://blog.youkuaiyun.com/lixintyw/article/details/105768799</link><guid>https://blog.youkuaiyun.com/lixintyw/article/details/105768799</guid><author>lixintyw</author><pubDate>Sun, 26 Apr 2020 15:14:53 +0800</pubDate><description><![CDATA[MVVM全名是Model－View－ViewModel,MVVM可以看作MVP的升级版。降低View和控制模块的耦合，减轻了视图的压力。与MVP不同的地方是，ViewModel会跟View进行绑定。这里会用到Android的 Data Binding。MVP与MVVM区别在于ViewModel与View绑定后，ViewModel与View其中一方的数据更新都能立即通知到对方;Presenter需...]]></description><category></category></item><item><title><![CDATA[Android MVP框架熟悉]]></title><link>https://blog.youkuaiyun.com/lixintyw/article/details/105767863</link><guid>https://blog.youkuaiyun.com/lixintyw/article/details/105767863</guid><author>lixintyw</author><pubDate>Sun, 26 Apr 2020 14:30:37 +0800</pubDate><description><![CDATA[MVP全名是Model－View－Presenter，MVP 是从经典的模式MVC演变而来的。将Model与View彻底分离。解决MVC中Activity职责过多，代码臃肿的问题。通常View与Presenter是一对一的，但复杂的View可以绑定多个Presenter来处理逻辑。与MVC不同的是，一般Activty会当作View层来处理。最主要的区别就是MVP中View与Model并不直接交互，...]]></description><category></category></item><item><title><![CDATA[Android MVC框架]]></title><link>https://blog.youkuaiyun.com/lixintyw/article/details/105765608</link><guid>https://blog.youkuaiyun.com/lixintyw/article/details/105765608</guid><author>lixintyw</author><pubDate>Sun, 26 Apr 2020 11:52:52 +0800</pubDate><description><![CDATA[MVC全名是Model View Controller，是模型(model)－视图(view)－控制器(controller)的缩写，是一种框架模式。将业务逻辑、数据、界面分离的一种代码组织方式，修改界面时无需去修改业务逻辑。

Model：模型层，负责处理数据的加载或存储。
View：视图层，负责界面数据的展示，与用户进行交互。
Controller：控制器层，负责逻辑业务的处理。

1.Vie...]]></description><category></category></item><item><title><![CDATA[框架、设计模式、架构之间的区别]]></title><link>https://blog.youkuaiyun.com/lixintyw/article/details/105764698</link><guid>https://blog.youkuaiyun.com/lixintyw/article/details/105764698</guid><author>lixintyw</author><pubDate>Sun, 26 Apr 2020 11:24:51 +0800</pubDate><description><![CDATA[框架和设计模式的区别

框架、设计模式这两个概念总容易被混淆，其实它们之间还是有区别的。框架通常是代码重用，而设计模式是设计重用，架构则介于两者之间，部分代码重用，部分设计重用，有时分析也可重用。在软件生产中有三种级别的重用：内部重用，即在同一应用中能公共使用的抽象块;代码重用，即将通用模块组合成库或工具集，以便在多个应用和领域都能使用；应用框架的重用，即为专用领域提供通用的或现成的基础结构，以获...]]></description><category></category></item><item><title><![CDATA[Android LiveData相关的学习]]></title><link>https://blog.youkuaiyun.com/lixintyw/article/details/105734253</link><guid>https://blog.youkuaiyun.com/lixintyw/article/details/105734253</guid><author>lixintyw</author><pubDate>Sun, 26 Apr 2020 10:29:21 +0800</pubDate><description><![CDATA[LiveData 是一个可以被观察的数据持有类，它可以感知 Activity、Fragment或Service 等组件的生命周期。它可以做到在组件处于激活状态的时候才会回调相应的方法，从而刷新相应的 UI。不用担心发生内存泄漏。当 config 导致 activity 重新创建的时候，不需要手动取处理数据的储存和恢复。它已经帮我们封装好了。当 Actiivty 不是处于激活状态的时候，如果你想 l...]]></description><category></category></item><item><title><![CDATA[Android lifecycle相关学习（用法2）]]></title><link>https://blog.youkuaiyun.com/lixintyw/article/details/105732388</link><guid>https://blog.youkuaiyun.com/lixintyw/article/details/105732388</guid><author>lixintyw</author><pubDate>Fri, 24 Apr 2020 16:17:53 +0800</pubDate><description><![CDATA[1.引用

Lifycycle使用之前需要引入相关的依赖包，它包含在 support library 26.1.0 及之后的依赖包中，如果我们的项目基于这些依赖包，那么不需要额外的引用。


// ViewModel and LiveData
implementation "android.arch.lifecycle:extensions:1.1.0"
// alternatively, jus...]]></description><category></category></item><item><title><![CDATA[Android lifecycle相关学习（用法）]]></title><link>https://blog.youkuaiyun.com/lixintyw/article/details/105725531</link><guid>https://blog.youkuaiyun.com/lixintyw/article/details/105725531</guid><author>lixintyw</author><pubDate>Fri, 24 Apr 2020 15:06:15 +0800</pubDate><description><![CDATA[Lifecycle 使得其它组件可以获取类似activity和Fragment那样响应生命周期的能力。我们可以直接在fragment和activity的相关生命周期函数中进行操作，但是这样的代码不太好维护，耦合性太高。 lifecycle-aware组件利用观察者模式，提供了构建生命周期感知型的组件的 类和相关接口，使得其它对“生命周期”感兴趣的组件能自己处理，而不必直接在fragment和act...]]></description><category></category></item><item><title><![CDATA[Android LayoutInflater学习]]></title><link>https://blog.youkuaiyun.com/lixintyw/article/details/105712119</link><guid>https://blog.youkuaiyun.com/lixintyw/article/details/105712119</guid><author>lixintyw</author><pubDate>Thu, 23 Apr 2020 18:09:20 +0800</pubDate><description><![CDATA[LayoutInflater技术广泛应用于需要动态添加View的时候。获得LayoutInflater的实例之后就可以调用它的inflate()方法来加载布局了，如下所示：


layoutInflater.inflate(resourceId, root);

inflate()方法一般接收两个参数，第一个参数就是要加载的布局id，第二个参数是指给该布局的外部再嵌套一层父布局，如果不需要就直接传...]]></description><category></category></item></channel></rss>