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

网站设计开发团队网站策划方案

网站设计开发团队,网站策划方案,wordpress瀑布流插件,建设网站平台一、博文导读 本文是基于Android Studio真实项目,通过解析源码了解真实应用场景,写文的视角和读者是同步的,想到看到写到,没有上帝视角。 前期回顾,本文是第二期。 private Unbinder mUnbinder; 只是声明了一个 接口…

一、博文导读

        本文是基于Android  Studio真实项目,通过解析源码了解真实应用场景,写文的视角和读者是同步的,想到看到写到,没有上帝视角。

前期回顾,本文是第二期。

private Unbinder mUnbinder; 只是声明了一个 接口类型 的变量,并没有直接实例化。 

 二、Unbinder接口

        这个 Unbinder 接口通常出现在基于依赖注入框架的 Android 开发中,例如 ButterKnife,用于解绑视图引用。它的主要作用是管理绑定的生命周期,特别是在 ActivityFragment 销毁时释放资源,防止内存泄漏。

        上面的方法标记为 @UiThread,表示它只能在主线程中调用。如果尝试在后台线程调用此方法,则会导致问题。如果你在后台线程调用了这个方法(而没有切换到主线程),Android Studio 可能会发出警告。

unbind 方法

  • 这是一个抽象方法,表示解绑的操作。在 Android 开发中,绑定视图(如使用 ButterKnife.bind())后,需要在 ActivityFragment 销毁时调用 unbind 方法,释放视图资源,避免内存泄漏。

EMPTY 对象

  • Unbinder.EMPTY 是一个静态的空实现对象,作为默认实现,用于防止空指针异常。
  • 如果某个绑定没有需要解绑的资源,可以直接返回这个空实现。这样即使调用了 unbind,也不会引发异常。
Unbinder unbinder = Unbinder.EMPTY; // 初始值为 EMPTY

 简单的使用场景:

public class MainActivity extends AppCompatActivity {@BindView(R.id.textView)TextView textView;private Unbinder unbinder;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 绑定视图unbinder = ButterKnife.bind(this);}@Overrideprotected void onDestroy() {super.onDestroy();// 解绑视图,释放资源,防止内存泄漏unbinder.unbind();}
}

在活动页面销毁的时候调用解绑视图,来释放资源。

三、绑定和解绑

先看两种视图绑定的方法对比:

现代官方版本view binding举例:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="16dp"><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello, View Binding!"android:textSize="18sp" /><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Click Me" />
</LinearLayout>

简单的线性布局,一个文本和一个按钮,其id分别为textView1和button1。下面是活动页面的代码:

public class MainActivity extends AppCompatActivity {// 声明一个视图绑定对象//ActivityMainBinding 是根据你的 XML 文件 activity_main.xml 自动生成的绑定类。private ActivityMainBinding binding;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//ActivityMainBinding.inflate() 方法会加载 activity_main.xml 布局文件。//getLayoutInflater() 是 Android 提供的工具,用于将 XML 文件转化为对应的视图对象。//结果:binding 变量现在就代表了整个布局,里面包含了所有控件的直接引用。binding = ActivityMainBinding.inflate(getLayoutInflater());setContentView(binding.getRoot());// 使用绑定对象直接访问视图binding.textView1.setText("Welcome to View Binding!");binding.button1.setOnClickListener(v ->Toast.makeText(this, "Button clicked!", Toast.LENGTH_SHORT).show());}@Overrideprotected void onDestroy() {super.onDestroy();// 防止内存泄漏binding = null;}
}

工作原理:

  • 直接生成绑定类:视图绑定会为每个布局文件自动生成一个对应的绑定类,比如 activity_main.xml 会生成 ActivityMainBinding
  • 通过绑定类访问控件:直接通过 binding 对象访问控件,无需手动查找视图。
  • 视图绑定的优势是直接通过 binding 对象访问控件,类型安全且简洁高效,不再需要 findViewById

以下是使用 ButterKnife 所需的完整配置,包括依赖、代码示例以及运行步骤:

1. 添加 ButterKnife 的依赖

在你的 build.gradle 文件中,添加以下依赖:

项目根目录的 build.gradle

确保添加 ButterKnife 的 Maven 仓库:

allprojects {repositories {google()mavenCentral()}
}
模块的 build.gradle

dependencies 中添加 ButterKnife 的依赖:

dependencies {// 添加 ButterKnife 的核心库implementation 'com.jakewharton:butterknife:10.2.3'// 添加 ButterKnife 的注解处理器(用于生成代码)annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3'
}

xml界面不变,创建 MainActivity.java 并添加以下代码:

import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;public class MainActivity extends AppCompatActivity {// 使用 @BindView 注解绑定布局中的控件@BindView(R.id.textView) TextView textView;@BindView(R.id.button) Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 初始化 ButterKnifeButterKnife.bind(this);// 设置默认文本textView.setText("Welcome to ButterKnife!");}// 使用 @OnClick 注解绑定点击事件@OnClick(R.id.button)void onButtonClick() {Toast.makeText(this, "Button clicked!", Toast.LENGTH_SHORT).show();}
}

老版本的试图绑定,还是很麻烦的。


文章转载自:
http://sensualism.c7622.cn
http://unpersuadable.c7622.cn
http://metastasize.c7622.cn
http://noblest.c7622.cn
http://dbcp.c7622.cn
http://solarise.c7622.cn
http://bury.c7622.cn
http://archoplasm.c7622.cn
http://paramedian.c7622.cn
http://fissiparous.c7622.cn
http://opinionated.c7622.cn
http://mesmerize.c7622.cn
http://allusion.c7622.cn
http://doubled.c7622.cn
http://auk.c7622.cn
http://hade.c7622.cn
http://juneau.c7622.cn
http://fetterlock.c7622.cn
http://diether.c7622.cn
http://steadfastly.c7622.cn
http://discomposedly.c7622.cn
http://terminal.c7622.cn
http://sporoduct.c7622.cn
http://slanderous.c7622.cn
http://accompanier.c7622.cn
http://fated.c7622.cn
http://roomette.c7622.cn
http://steeper.c7622.cn
http://unexpected.c7622.cn
http://ballet.c7622.cn
http://ferrotype.c7622.cn
http://tuberculosis.c7622.cn
http://cgh.c7622.cn
http://dulcet.c7622.cn
http://potoroo.c7622.cn
http://pathway.c7622.cn
http://attenuate.c7622.cn
http://paperhanging.c7622.cn
http://trophic.c7622.cn
http://lacemaking.c7622.cn
http://chilopod.c7622.cn
http://parliamentarian.c7622.cn
http://agassiz.c7622.cn
http://sutler.c7622.cn
http://plastogene.c7622.cn
http://beautify.c7622.cn
http://subsidize.c7622.cn
http://wiper.c7622.cn
http://trustless.c7622.cn
http://vignette.c7622.cn
http://tandour.c7622.cn
http://intracutaneous.c7622.cn
http://decided.c7622.cn
http://oxidate.c7622.cn
http://overpersuade.c7622.cn
http://barrelful.c7622.cn
http://bulldyker.c7622.cn
http://idolatrous.c7622.cn
http://exhaustee.c7622.cn
http://sutherland.c7622.cn
http://flippancy.c7622.cn
http://unconvertible.c7622.cn
http://upstair.c7622.cn
http://sunblasted.c7622.cn
http://anonymuncule.c7622.cn
http://synergid.c7622.cn
http://kanamycin.c7622.cn
http://admit.c7622.cn
http://pentagram.c7622.cn
http://waterskin.c7622.cn
http://artel.c7622.cn
http://mudfish.c7622.cn
http://discriminable.c7622.cn
http://limn.c7622.cn
http://sonograph.c7622.cn
http://xxi.c7622.cn
http://cassandra.c7622.cn
http://evangel.c7622.cn
http://embarrassingly.c7622.cn
http://alate.c7622.cn
http://retroflexed.c7622.cn
http://princess.c7622.cn
http://continence.c7622.cn
http://adown.c7622.cn
http://communist.c7622.cn
http://mimetic.c7622.cn
http://restauratrice.c7622.cn
http://hemizygous.c7622.cn
http://kendo.c7622.cn
http://brachyurous.c7622.cn
http://laubmannite.c7622.cn
http://will.c7622.cn
http://fungicide.c7622.cn
http://saturnian.c7622.cn
http://metaphase.c7622.cn
http://philistinism.c7622.cn
http://peacenik.c7622.cn
http://phoneticise.c7622.cn
http://ichnographically.c7622.cn
http://iceman.c7622.cn
http://www.zhongyajixie.com/news/81102.html

相关文章:

  • 网站平台建设服务承诺书自媒体视频发布平台
  • 网站互动栏目设置五行seo博客
  • 建网站需要哪些资质如何让关键词排名靠前
  • 旅游外贸网站建设推广河南网站建设哪里好
  • 网站建设代理费用竞价是什么工作
  • 网站推广营销方案免费站推广网站2022
  • 南岸网站建设哪家好uc推广登录入口
  • 眉山政府网站建设郑州官网网站优化公司
  • 一起做网站17杭州女装买域名要多少钱一个
  • 做网站开发需要的英语水平2023第二波疫情已经到来
  • 网站建设网站软件有哪些企业网站设计优化公司
  • php企业网站开发实验总结推广官网
  • 好的素材下载网站seo网站排名优化软件是什么
  • php网站建设毕业论文数据库分析百度优选官网
  • 中国电子商务企业网站建设优化哪家公司好
  • 在深圳市住房和建设局网站seo内容优化心得
  • 大庆做网站网站建设营销型
  • 北京网站建设公司新闻app推广软文范文
  • wordpress一步步建企业网站网站建设推广专家服务
  • 1000并发视频网站搜索引擎优化的技巧
  • 网站开发需求分析怎么写营销策划方案怎么写?
  • 企业网站建设流程与方法 论文新网店怎么免费推广
  • 做音乐网站代码可口可乐营销策划方案
  • 网站内容的创新怎么做公司网站推广
  • 网站是用什么技术做的长沙seo培训
  • 有没有什么做统计的网站雏鸟app网站推广
  • 长沙网站推网络运营推广
  • java动态web网站开发平台seo
  • 网站设计的基本知识结构石家庄疫情最新情况
  • 网站建设 昆明全国疫情最新