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

鹰潭市网站建设_网站建设公司_原型设计_seo优化

适合站长做的网站,怎么用网页制作一个网站,马鞍山网站建设公司,西安维护网站Jetpack 是一个由多个库组成的套件#xff0c;可帮助开发者遵循最佳做法、减少样板代码并编写可在各种 Android 版本和设备中一致运行的代码#xff0c;让开发者可将精力集中于真正重要的编码工作。 Android Jetpack组件的优势#xff1a; Jetpack推出的主要目的是为了能够…Jetpack 是一个由多个库组成的套件可帮助开发者遵循最佳做法、减少样板代码并编写可在各种 Android 版本和设备中一致运行的代码让开发者可将精力集中于真正重要的编码工作。 Android Jetpack组件的优势 Jetpack推出的主要目的是为了能够让开发者更加快速、方便以及高质量的完成产品开发 轻松管理应用程序的生命周期后台任务的管理导航的处理等利用Jetpack组件进行开发可以有效减少内存溢出、崩溃的概率提升应用开发的质量 Jetpack中包含的库包括 ViewModel帮助管理UI组件的生命周期并存储和管理UI相关的数据。LiveData提供了响应式编程的功能可以让数据在数据源发生变化时自动更新UI。Room提供了一个抽象层可以让开发者方便地访问和管理SQLite数据库。Navigation提供了一种简单、一致的方式来处理应用程序的导航。WorkManager提供了一种简单、可靠的方式来管理后台任务。 除此之外Jetpack还包括了诸如Paging、Data Binding、Preferences、Security等库这些库都旨在简化开发过程并提高应用程序的性能和可靠性。 Jetpack四件套介绍 Lifecycle Life生命cycle周期顾名思义Lifecycle是生命周期的意思。它是Jetpack中的一个 生命周期感知型组件 可执行操作来感知响应另一个组件如 Activity 和 Fragment的生命周期状态的变化。 使用LifeCycle有什么好处 LifeCycle可以帮助开发者创建可感知生命周期的组件。这样组件便能够在其内部管理自己的生命周期从而降低模块间的耦合度并降低内存泄漏发生的可能性 举个例子我们经常需要在页面的onCreate()方法中对组件进行初始化在onPause()方法中停止组件而在页面的onDestroy()方法中对组件进行资源回收工作。这样的工作非常烦琐会让页面与组件之间的耦合度变高。但这些工作又不得不做因为这可能会引发内存泄漏。 正确使用LifeCycle 使用思路 构建一个 Lifecycle 对象通过一个实现了 LifecycleOwner 接口的对象的 getLifecycle()方法返回这个对象就是一个被观察者具有生命周期感知能力构建一个 LifecycleObserver 对象它对指定的 Lifecycle 对象进行监听通过将 Lifecycle 对象的 addObserver(…) 方法将 Lifecycle 对象和 LifecycleObserver 对象进行绑定 ①导入依赖这里直接去官网看最新的版本导入就可以了 这里给出一些按需选择并不是全部都需要的 dependencies {def lifecycle_version 2.2.0def arch_version 2.1.0// ViewModelimplementation androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version// LiveDataimplementation androidx.lifecycle:lifecycle-livedata:$lifecycle_version// 只有Lifecycles (不带 ViewModel or LiveData)implementation androidx.lifecycle:lifecycle-runtime:$lifecycle_version// Saved state module for ViewModelimplementation androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version// lifecycle注解处理器annotationProcessor androidx.lifecycle:lifecycle-compiler:$lifecycle_version// 替换 - 如果使用Java8,就用这个替换上面的lifecycle-compilerimplementation androidx.lifecycle:lifecycle-common-java8:$lifecycle_version//以下按需引入// 可选 - 帮助实现Service的LifecycleOwnerimplementation androidx.lifecycle:lifecycle-service:$lifecycle_version// 可选 - ProcessLifecycleOwner给整个 app进程 提供一个lifecycleimplementation androidx.lifecycle:lifecycle-process:$lifecycle_version// 可选 - ReactiveStreams support for LiveDataimplementation androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version// 可选 - Test helpers for LiveDatatestImplementation androidx.arch.core:core-testing:$arch_version} ​②创建一个类实现LifecycleOwner public class MyLocationListener implements LifecycleObserver {public MyLocationListener(Activity context, OnLocationChangeListener listener) { ​//初始化操作iniLocationManager();}private void iniLocationManager() {}//当Activity执行onResume()方法时该方法会被自动调用OnLifecycleEvent(Lifecycle.Event.ON_RESUME)private void startGetLocation(){Log.e(true,onResume被调用了);}//当Activity执行onPause()方法时该方法会被自动调用OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)private void stopGetLocation(){Log.e(true,onPause被调用了);}//当Activity执行onDestroy()方法时该方法会被自动调用OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)private void delGetLocation(){Log.e(true,onDestroy被调用了);}//当地理位置发送改变时通过该接口通知调用者public interface OnLocationChangeListener{void onChanged(double latitude,double longitude);} } ​按照需求通过注解的方式来实现方法的调用。 ③在需要被观察的activity或者fragment中添加Lifecycle对象并且添加observer。 主MainActivity 在MainActivity中只需要引用MyLocationListener即可不用再关心Activity生命周期变化对该组件所带来的影响。生命周期的管理完全交给MyLocationListener内部自行处理。在Activity中要做的只是通过getLifecycle().addObserver()方法将观察者与被观察者绑定起来代码如下: public class MainActivity extends AppCompatActivity { ​private MyLocationListener myLocationListener;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);myLocationListener new MyLocationListener(this, new MyLocationListener.OnLocationChangeListener() {Overridepublic void onChanged(double latitude, double longitude) {//展示收到的位置信息}});//将观察者与被观察者绑定getLifecycle().addObserver(myLocationListener);} }ViewModel ViewModel是Jetpack AAC的重要组件同时也有一个同名抽象类。 ViewModel意为 视图模型即为界面准备数据的模型。简单理解就是ViewModel为UI层提供数据。 ViewModel使用 ①思路 导入依赖继承ViewModel自定义MyViewModel在MyViewModel中编写获取UI数据的逻辑使用LiveData将获取到的UI数据抛出在Activity/Fragment中使用ViewModelProvider获取MyViewModel实例观察MyViewModel中的LiveData数据进行对应的UI更新。 举个例子如果您需要在Activity中显示用户信息那么需要将获取用户信息的操作分放到ViewModel中代码如下 public class UserViewModel extends ViewModel { ​private MutableLiveDataString userLiveData ;private MutableLiveDataBoolean loadingLiveData;public UserViewModel() {userLiveData new MutableLiveData();loadingLiveData new MutableLiveData();}//获取用户信息,假装网络请求 2s后 返回用户信息public void getUserInfo() {loadingLiveData.setValue(true);new AsyncTaskVoid, Void, String() {Overrideprotected void onPostExecute(String s) {loadingLiveData.setValue(false);userLiveData.setValue(s);//抛出用户信息}Overrideprotected String doInBackground(Void... voids) {try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}String userName AAAAAABBBBBBBBBBBBCCCCCCCCC;return userName;}}.execute();}public LiveDataString getUserLiveData() {return userLiveData;}public LiveDataBoolean getLoadingLiveData() {return loadingLiveData;} } ​UserViewModel继承ViewModel然后逻辑很简单假装网络请求 2s后 返回用户信息其中userLiveData用于抛出用户信息loadingLiveData用于控制进度条显示。 再看UI层 public class UserActivity extends AppCompatActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);...Log.i(TAG, onCreate: ); ​TextView tvUserName findViewById(R.id.textView);ProgressBar pbLoading findViewById(R.id.pb_loading);//获取ViewModel实例ViewModelProvider viewModelProvider new ViewModelProvider(this);UserViewModel userViewModel viewModelProvider.get(UserViewModel.class);//观察 用户信息userViewModel.getUserLiveData().observe(this, new ObserverString() {Overridepublic void onChanged(String s) {// update ui.tvUserName.setText(s);}});userViewModel.getLoadingLiveData().observe(this, new ObserverBoolean() {Overridepublic void onChanged(Boolean aBoolean) {pbLoading.setVisibility(aBoolean?View.VISIBLE:View.GONE);}});//点击按钮获取用户信息findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View v) {userViewModel.getUserInfo();}});}Overrideprotected void onStop() {super.onStop();Log.i(TAG, onStop: );}Overrideprotected void onDestroy() {super.onDestroy();Log.i(TAG, onDestroy: );} } ​ ​页面有个按钮用于点击获取用户信息有个TextView展示用户信息。 在onCreate()中先 创建ViewModelProvider实例传入的参数是ViewModelStoreOwnerActivity和Fragment都是其实现。然后通过ViewModelProvider的get方法 获取ViewModel实例然后就是 观察ViewModel中的LiveData。 ②总结 ViewModel的使用很简单作用和原来的Presenter一致。只是要结合LiveDataUI层观察即可。ViewModel的创建必须通过ViewModelProvider。注意到ViewModel中没有持有任何UI相关的引用。旋转手机重建Activity后数据确实恢复了。 LiveData LiveData是Jetpack提供的一种响应式编程组件它可以包含任何类型的数据并在数据发生变化的时候通知给观察者适合与ViewModel结合在一起使用就可以让ViewModel将数据的变化主动通知给Activity。 LiveData的使用 在开发中我们比较常用的就是 MutableLiveData 他给我们暴露好了修改对应值的方法LiveData的作者认为我们有这个功能就够了。 public class MutableLiveDataT extends LiveDataT {public MutableLiveData(T value) {super(value);}public MutableLiveData() {super();}// 在子线程 中 更改数据 就需要用到postValue方法Overridepublic void postValue(T value) {super.postValue(value);}Overridepublic void setValue(T value) {super.setValue(value);} }一个简单的 使用MutableLiveData的实例 class LiveDataTestActivity : AppCompatActivity() {val TAG LiveDataTestActivityvar index 1val liveData:MutableLiveDataString by lazy {MutableLiveDataString().also {it.value 周杰伦}}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)var binding ActivityLiveDataTestBinding.inflate(layoutInflater)setContentView(binding.root) ​liveData.observe(this){Log.e(TAG,it)}}fun changeLivaData(view: View) {liveData.value 周杰伦${index}} }首先调用liveData.observe注册一个观察者观察者注册商后用户点击xml上的按钮liveData 会调用setValue方法(因为是kotlin省略了set) 然后在observe的回调中会打印对应的值那么我们看看这个最终是怎么通知观察者 回调的呢。liveData调用了setValue方法最后是调到Super了也就是LiveData中的setValue方法。 DataBinding DataBinding 是 Google 在 Jetpack 中推出的一款数据绑定的支持库他的目的是一个帮助我们实现数据和UI绑定并可以进行双向绑定。 优势 项目更加简介代码可读性更高。不再需要findViewById()。布局文件可以包含简单的业务逻辑。 DataBinding使用 实例化布局文件了我们删除掉传统的setContentView()通过 DataBindingUtil.setContentView()来实例化文件。实例化返回的布局文件对象名字和布局文字名字一致遵循大驼峰命名规则后面加上Binding。然后通过binding对象得到控件控件命名遵循小驼峰规则。 ActivityMainBinding bindingDataBindingUtil.setContentView(this,R.layout.activity_main); binding.textHome.setText(hello databinding!);数据绑定 如何将数据传递到布局文件中呢首先在布局文件中定义布局变量指定对象的名字和类型当然数据的操作在标签里。data标签里用于放在布局文件中各个UI控件所需要的数据这些数据类型可以是自定义类型也可以是基本类型。 data ​variablenamebooktypecom.yhj.jetpackstudy.Book /variablenamenumbertypeInteger / ​ /data public class Book { ​private int id;private String title;private String author; ​ }有时我们需要在布局文件中引入一些Java工具类或静态类处理一些简单的逻辑在布局中我们可以使用标签导入。使用alias当类名有冲突时其中一个类可使用别名重命名。默认导入java.lang.* data import typecom.yhj.jetpackstudy.ui.home.ConstantsaliasreName/ /data布局中的数据绑定使用“{}”语法写入属性中通过布局表达式的形式设置TextView的text。 TextView android:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text{book.title} /TextView android:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text{Constants.APP_ID} /DataBinding为了方便使用对布局变量提供了Setter类因此在Activity中通过setBook()将Book对象传递给布局变量。 Book book new Book(0, android, yhj); //BR类似于Android中的R类由DataBinding自动生成用于存放所有布局变量的id。 //DataBinding为了方便使用提供了Setter类直接使用setXxx() //binding.setVariable(BR.book,book); binding.setBook(book);绑定后就不需要再Activity中设置内容了实现了布局与页面的解耦。 DataBinding具有Null校验如果绑定值为null则分配默认值null如果类型为int默认值为0。 本文主要讲了在Android jetpack中的重要组件更多的jetpack技术请参考《jetpack技术与Android架构精讲》点击可查看详细类目。 最后 在我们工作中可维护、可扩展、可测试和可重用的业务架构对于提高应用程序的质量和效率意义非凡而JetPack是帮助开发者快速地组织和管理应用程序的代码的工具包。希望这篇文章能够让大家了解到jetpack的重要性
http://www.ihoyoo.com/news/47383.html

相关文章:

  • wordpress logo链接谷歌优化培训
  • 比特币交易所网站开发wordpress内部跳转链接
  • 现在哪个网站还做白拿制作相片的免费软件
  • 中国空间站最新消息新闻嘉兴网站制作策划
  • 电商网站设计方法微信android平板版
  • 免费网站入口网站免费进简单网站建设合同模板
  • 谁做违法网站wordpress评论添加表情
  • 南通优化网站公司哪家好企业贷款政策最新消息2022
  • 网站建设实例教程阅读网站建设
  • 郑州专业手机网站制作鄂尔多斯建设局网站
  • 做公司门户网站公司注册记账代理公司
  • 威海德嬴网站建设设计排版网站
  • 珠宝品牌网站设计网站制作效果好
  • 利用国外网站文章图片做书营利wordpress 前端构建
  • 网站开发软件是什么专业手机网页在线游戏
  • 河南做网站公司哪家专业美发网站怎么做
  • 西安网易网站建设校园活动策划
  • 人才网站的seo怎么做软件开发咨询服务
  • 企业营销型网站有哪些家用宽带做网站
  • 中国做w7的网站wordpress内存缓存无插件
  • 爱最好网站建设wordpress 游客留言
  • 新民个人网站建设优势有限公司网址
  • 网站备案名称更改wordpress 插件 文本
  • 移动网站怎么做上海网站建设电
  • 福州网站建设方案推广重置wordpress
  • 厦门网站推广找谁中国世达建筑公司排名
  • 公众号网站开发jssdk wordpress
  • 重庆集团网站建设河源网站网站建设
  • 南京网站定制开发WordPress上不了
  • 网站制作济南微信公众号怎样做淘客网站