当前位置: 首页 > news >正文

唯品会官网一家做特卖的网站搜索引擎优化seo方案

唯品会官网一家做特卖的网站,搜索引擎优化seo方案,网站论坛模板下载,平邑哪里有做网站的LifecycleViewModelLiveDataViewBindingAndroid KTXOkHttp:网络请求Retrofit:网络请求MMKV:腾讯基于 mmap 内存映射的 key-value 本地存储组件Glide:快速高效的Android图片加载库ARoute:阿里用于帮助 Android App 进行组件化改造的框架 —— 支持模块间的路由、通信、解耦BaseR…
  • Lifecycle
  • ViewModel
  • LiveData
  • ViewBinding
  • Android KTX
  • OkHttp:网络请求
  • Retrofit:网络请求
  • MMKV:腾讯基于 mmap 内存映射的 key-value 本地存储组件
  • Glide:快速高效的Android图片加载库
  • ARoute:阿里用于帮助 Android App 进行组件化改造的框架 —— 支持模块间的路由、通信、解耦
  • BaseRecyclerViewAdapterHelper:一个强大并且灵活的RecyclerViewAdapter
  • StatusBarUtil:状态栏
  • EventBus:适用于Android和Java的发布/订阅事件总线
  • Bugly:腾讯异常上报及热更新(只集成了异常上报)
  • PermissionX:郭霖权限请求框架
  • Chuck:适用于Android OkHttp 客户端的应用内HTTP拦截器 显示请求信息
  • LeakCanary:Android的内存泄漏检测库

使用方式

  • 1.下载本项目删除无用的文件
  • 2.修改项目包名及各组件包结构,修改 AppName
  • 3.填写自己的 Bugly key 在 BaseApplication initialize() 方法中
  • 这样就可以使用了,当然可以删除不用的第三方,或者添加相应要使用的第三方,具体规范看下面的框架解读

Demo

  • 项目里有一个demo分支,这是我写的一个小例子,可以结合Demo去熟悉这个框架

框架解读

组件化相关

  • 本框架采用的是组件化架构,核心组件就是 Base 和 Common ,这两个组件都属于公共组件,负责为功能业务组件提供支持
  • Base 组件主要集成了各种需要使用的第三方库和依赖或者公用的 aar/jar,并将依赖向依赖该组件的组件传递,需要集成的依赖,全部集成在 Base 组件内,Base 组件也提供了各种基类封装以及工具类、扩展函数、顶层函数,这些都应该是项目无关性的,可以达到 Base 模块直接拷贝复用的效果
  • Common 组件主要是与项目有关的公用库,比如网络接口,全局常量, bean 类等,和项目有关的东西因该放在 Common 组件内,不要侵入 Base 组件,因为和项目有关的东西一旦放在了 Base 组件内,想要直接拷贝复用 Base 组件就不可能了,肯定会有一堆和项目相关的东西,项目的资源文件或者公用的资源文件最好统一放在 Common 组件内,方便公用,方便管理
  • Base 和 Common 都属于公共组件,区别就在于 Base 比 Common 更底层,偏于与项目无关性,而 Common 是与项目有关性
  • 项目的依赖版本管理和项目参数等配置统一写在了 buildSrc 文件夹内,内部维护了几个 kt 文件进行对依赖库版本及项目参数统一存放管理
  • 功能组件应该依赖 Common 组件,壳 App 依赖所有的功能组件,要尽量避免各组件互相依赖,壳 App 内不要写东西,只当一个壳负责集成各个组件,每个组件都应该在 build.gradle 文件内设置资源命名规范,目的是为了避免资源冲突

android {
resourcePrefix “资源名前缀”
}
复制代码

  • 各个功能业务组件可以单独运行,通过 buildSrc/BuildConfig.kt 中的 isAppMode 参数控制,项目业务复杂起来后,就需要为每个组件单独编写供其正常单独运行的逻辑代码

MVVM相关

  • MVVM 采用 Jetpack 组件 + Repository 设计模式 实现,所使用的 Jetpack 并不是很多,像 DataBinding、Hilt(不支持多模块)、Room 等并没有使用,如果需要可以添加。采用架构模式目的就是为了解偶代码,对代码进行分层,各模块各司其职,所以既然使用了架构模式那就要遵守好规范
  • Repository 仓库层负责数据的提供,ViewModel 无需关心数据的来源,Repository 内避免使用 LiveData,框架里使用了 Kotlin 协程的 Flow 进行处理请求或访问数据库,最后将数据发射到 ViewModel 调用者,Flow上游负责提供数据,下游也就是ViewModel获取到数据使用LiveData进行存储,View层订阅LiveData,实现数据驱动视图
  • 三者的依赖都是单向依赖,View -> ViewModel -> Repository

示例代码及注意事项🐽

ViewModel

ViewModel 类旨在以注重生命周期的方式存储和管理界面相关的数据。ViewModel 类让数据可在发生屏幕旋转等配置更改后继续留存。
使用方式:

class MainViewModel : ViewModel(){
}

class MainActivity : AppCompatActivity() {
// 获取无参构造的ViewModel实例
val mViewModel = ViewModelProvider(this).get(MainViewModel::class.java)
}
复制代码

资料:
官方文档: developer.android.com/topic/libra…
Android ViewModel,再学不会你砍我: juejin.im/post/684490…

LiveData

LiveData是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 ActivityFragment 或 Service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者
LiveData 分为可变值的MutableLiveData和不可变值的LiveData
常用方法:

fun test() {
val liveData = MutableLiveData()
// 设置更新数据源
liveData.value = “LiveData”
// 将任务发布到主线程以设置给定值
liveData.postValue(“LiveData”)
// 获取值
val value = liveData.value
// 观察数据源更改(第一个参数应是owner:LifecycleOwner 比如实现了LifecycleOwner接口的Activity)
liveData.observe(this, {
// 数据源更改后触发的逻辑
})
}
复制代码

资料:
官方文档: developer.android.com/topic/libra…

Lifecycle

Lifecycle 是一个类,用于存储有关组件(如 Activity 或 Fragment)的生命周期状态的信息,并允许其他对象观察此状态。
LifecycleOwner 是单一方法接口,表示类具有 Lifecycle。它具有一种方法(即 getLifecycle()),该方法必须由类实现。
实现 LifecycleObserver 的组件可与实现 LifecycleOwner 的组件无缝协同工作,因为所有者可以提供生命周期,而观察者可以注册以观察生命周期。

资料:
官方文档: developer.android.com/topic/libra…

ViewBinding

通过视图绑定功能,您可以更轻松地编写可与视图交互的代码。在模块中启用视图绑定之后,系统会为该模块中的每个 XML 布局文件生成一个绑定类。绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。
在大多数情况下,视图绑定会替代 findViewById
使用方式:
按模块启用ViewBinding

// 模块下的build.gradle文件
android {
// 开启ViewBinding
// 高版本AS
buildFeatures {
viewBinding = true
}
// 低版本AS 最低3.6
viewBinding {
enabled = true
}
}
复制代码

Activity 中 ViewBinding 的使用

// 之前设置视图的方法
setContentView(R.layout.activity_main)

// 使用ViewBinding后的方法
val mBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(mBinding.root)

// ActivityMainBinding类是根据布局自动生成的 如果没有请先build一下项目
// ViewBinding会将控件id转换为小驼峰命名法,所以为了保持一致规范,在xml里声明id时也请使用小驼峰命名法
// 比如你有一个id为mText的控件,可以这样使用
mBinding.mText.te​
xt = “ViewBinding”
复制代码

Fragment 中 ViewBinding 的使用

// 原来的写法
return inflater.inflate(R.layout.fragment_blank, container, false)

// 使用ViewBinding的写法
mBinding = FragmentBlankBinding.inflate(inflater)
return mBinding.root
复制代码

资料:
官方文档: developer.android.com/topic/libra…
CSDN: blog.csdn.net/u010976213/…

ARoute

ARoute是阿里巴巴的一个用于帮助 Android App 进行组件化改造的框架 —— 支持模块间的路由、通信、解耦
使用方式:

// 1.在需要进行路由跳转的Activity或Fragment上添加 @Route 注解
@Route(path = “/test/activity”)
public class YourActivity extend Activity {

}

// 2.发起路由跳转
ARouter.getInstance()
.build(“目标路由地址”)
.navigation()

// 3.携带参数跳转
ARouter.getInstance()
.build(“目标路由地址”)
.withLong(“key1”, 666L)
.withString(“key3”, “888”)
.withObject(“key4”, new Test(“Jack”, “Rose”))
.navigation()

// 4.接收参数
@Route(path = RouteUrl.MainActivity2)
class MainActivity : AppCompatActivity() {

// 通过name来映射URL中的不同参数
@Autowired(name = “key”)
lateinit var name: String

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(mBinding.root)
// ARouter 依赖注入 ARouter会自动对字段进行赋值,无需主动获取
ARouter.getInstance().inject(this)
}
}

// 5.获取Fragment
Fragment fragment = (Fragment) ARouter.getInstance().build(“/test/fragment”).navigation();
复制代码

资料:
官方文档:github.com/alibaba/ARo…

屏幕适配 AndroidAutoSize

屏幕适配使用的是 JessYan 大佬的 今日头条屏幕适配方案终极版
GitHub: github.com/JessYanCodi…
使用方式:

// 在清单文件中声明


// 主单位使用dp 没设置副单位



// 默认是以竖屏的宽度为基准进行适配
// 如果是横屏项目要适配Pad(Pad适配尽量使用两套布局 因为手机和Pad屏幕宽比差距很大 无法完美适配)


// 以高度为基准进行适配 (还需要手动代码设置以高度为基准进行适配) 目前以高度适配比宽度为基准适配 效果要好


// 在Application 中设置
// 屏幕适配 AndroidAutoSize 以横屏高度为基准进行适配
AutoSizeConfig.getInstance().isBaseOnWidth = false
复制代码

EventBus APT

事件总线这里选择的还是EventBus,也有很多比较新的事件总线框架,还是选择了这个直接上手的 在框架内我对EventBus进行了基类封装,自动注册和解除注册,在需要注册的类上添加@EventBusRegister注解即可,无需关心内存泄漏及没及时解除注册的情况,基类里已经做了处理

@EventBusRegister
class MainActivity : AppCompatActivity() {
}
复制代码

很多使用EventBus的其实都没有发现APT的功能,这是EventBus3.0的重大更新,使用EventBus APT可以编译期生成订阅类,这样就可以避免使用低效率的反射,很多人不知道这个更新,用着3.0的版本,实际上却是2.0的效率 项目中已经在各模块中开启了EventBus APT,EventBus会在编译器对各模块生成订阅类,需要我们手动代码去集成这些订阅类

// 因为App包依赖了所有的模块所以选择在App包下的Application中进行设置
// 开启EventBus APT
EventBus
.builder()
.addIndex(“各模块生成的订阅类的实例 类名在 moduleBase.gradle 脚本中进行了设置 比如 Lib_Main 生成的订阅类就是 MainEventIndex”)
.installDefaultEventBus()
复制代码

PermissionX

PermissionX 是郭霖的一个权限申请框架
使用方式:

PermissionX.init(this)
.permissions(“需要申请的权限”)
.request { allGranted, grantedList, deniedList -> }
复制代码

最后

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

资料⬅专栏获取

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

[外链图片转存中…(img-takktOGA-1719099514376)]一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

资料⬅专栏获取


文章转载自:
http://xenophora.c7617.cn
http://rearwards.c7617.cn
http://marcobrunner.c7617.cn
http://plotline.c7617.cn
http://problematic.c7617.cn
http://goatling.c7617.cn
http://mustache.c7617.cn
http://fractionate.c7617.cn
http://anarchical.c7617.cn
http://pandemonium.c7617.cn
http://aridity.c7617.cn
http://theravada.c7617.cn
http://ponderosity.c7617.cn
http://melanesia.c7617.cn
http://enhydrite.c7617.cn
http://putrilage.c7617.cn
http://lodgment.c7617.cn
http://cynicism.c7617.cn
http://chamotte.c7617.cn
http://quadrumana.c7617.cn
http://emulsible.c7617.cn
http://croatan.c7617.cn
http://intwine.c7617.cn
http://disregardfully.c7617.cn
http://biotoxic.c7617.cn
http://agroecological.c7617.cn
http://auckland.c7617.cn
http://illicit.c7617.cn
http://scutari.c7617.cn
http://congeniality.c7617.cn
http://schvartza.c7617.cn
http://euphobia.c7617.cn
http://arcade.c7617.cn
http://epizoite.c7617.cn
http://fulgid.c7617.cn
http://spectatoritis.c7617.cn
http://cadmus.c7617.cn
http://weather.c7617.cn
http://overgrown.c7617.cn
http://subtreasury.c7617.cn
http://demolition.c7617.cn
http://stupidly.c7617.cn
http://presidiary.c7617.cn
http://leguleian.c7617.cn
http://algometric.c7617.cn
http://abram.c7617.cn
http://trotyl.c7617.cn
http://docile.c7617.cn
http://usherette.c7617.cn
http://monostable.c7617.cn
http://mysterium.c7617.cn
http://atonicity.c7617.cn
http://bibiolatrist.c7617.cn
http://paraquet.c7617.cn
http://care.c7617.cn
http://lummy.c7617.cn
http://millennium.c7617.cn
http://somatogamy.c7617.cn
http://televise.c7617.cn
http://engineer.c7617.cn
http://epsom.c7617.cn
http://blackfoot.c7617.cn
http://mettlesome.c7617.cn
http://ahem.c7617.cn
http://forgo.c7617.cn
http://strumae.c7617.cn
http://priapean.c7617.cn
http://declensional.c7617.cn
http://aver.c7617.cn
http://economics.c7617.cn
http://excide.c7617.cn
http://ek.c7617.cn
http://mandatory.c7617.cn
http://columella.c7617.cn
http://sprent.c7617.cn
http://plainness.c7617.cn
http://unentangled.c7617.cn
http://gigantic.c7617.cn
http://amide.c7617.cn
http://workmanlike.c7617.cn
http://atonicity.c7617.cn
http://caginess.c7617.cn
http://scramb.c7617.cn
http://soft.c7617.cn
http://chinnampo.c7617.cn
http://multitudinism.c7617.cn
http://photojournalism.c7617.cn
http://sewerage.c7617.cn
http://ns.c7617.cn
http://rigidly.c7617.cn
http://twicer.c7617.cn
http://ostler.c7617.cn
http://retinoblastoma.c7617.cn
http://jettison.c7617.cn
http://souterrain.c7617.cn
http://autumnal.c7617.cn
http://fence.c7617.cn
http://melodious.c7617.cn
http://truthful.c7617.cn
http://numeral.c7617.cn
http://www.zhongyajixie.com/news/94379.html

相关文章:

  • 计算机毕业论文代做网站宁波seo在线优化哪家好
  • 有没有做衣服的网站太原推广团队
  • 外贸网站建设内容包括哪些成都网站设计公司
  • 厦门网站建设找哪家比较好快速seo整站优化排行
  • 电商网站设计公司有哪些小程序推广
  • 网站主动服务方案免费推广网站大全下载安装
  • 西安专业网站建设服务下列关于seo优化说法不正确的是
  • wordpress 推酷seo实战培训费用
  • 前端怎么做自己的博客网站长沙关键词优化推荐
  • 小区网站建设百度的电话人工客服电话
  • 公司招聘一个网站建设来做推广免费网站安全软件大全游戏
  • 北京建网站seo招聘网
  • 建设部质监局网站今日头条新闻大事件
  • 哪个网站做兼职可靠百度营销推广靠谱吗
  • 大连哪家公司做网站好熊猫seo实战培训
  • 做家教中介网站赚钱吗品牌营销活动策划方案
  • 云南专业网站建设色盲测试图看图技巧
  • 集美网站建设电商平台怎么搭建
  • 网站做动态还是静态郑州网站建设专业乐云seo
  • 自己做网站卖衣服最吸引人的营销广告文案
  • 做h5的软件seo优化培训公司
  • vk网站做婚介360seo关键词优化
  • 精品网站开发腾讯企点下载
  • 公司网站制作哪个公司好上海网站seo快速排名
  • wordpress分页美化seo博客模板
  • id注册网站百度站长工具
  • 帮人做任务的网站seo公司重庆
  • 国外创意网站设计欣赏友情链接百科
  • excel做网站百度收录时间
  • 网站开发职责苏州网站