Android——事务处理(十二)

news2024/11/27 13:34:59

1. 事件处理简介

1.1 知识点

(1)了解事件处理的作用;

(2)了解常用的事件及相关处理接口;

1.2 具体内容

在android当中,基本上每一个组件都有用相应的事件处理,但是不过有多少种事件多少个组件,事件操作的流程都是一致的,事件处理需要一个事件源,事件源包含本身触发事件的组件以及事件的类型这两个关键信息。那么每触发一个事件,都需要有一个相应的监听来进行处理。

 

 

package com.example.eventlistenerproject;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class EventListenerActivity extends Activity {
       Button but = null;
       EditText edt = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event_listener);
        but = (Button)super.findViewById(R.id.but);
        edt = (EditText)super.findViewById(R.id.edt);
        but.setOnClickListener(new OnClickListenerImpl());
        
        
    }
  class OnClickListenerImpl implements OnClickListener{

	@Override
	public void onClick(View v) {
		edt.setText("按钮被点击了");
		
	}}

   
}

 以上是使用声明内部类的形式,我们达到了注册单击事件的效果。

使用匿名内部类:

package com.example.eventlistenerproject;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class EventListenerActivity extends Activity {
       Button but = null;
       EditText edt = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event_listener);
        but = (Button)super.findViewById(R.id.but);
        edt = (EditText)super.findViewById(R.id.edt);
        but.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				edt.setText("按钮被点击了,这次是使用的匿名内部类");
				
			}
		});
        
        
    }
  
   
}

同时也可以直接在布局文件当中去进行注册,相应的只需要在Activity当中去声明一个与其注册的方法名相同的事件处理方法就可以了(需要注意的是,该方法同样需要有一个View对象作为参数)。

1.3 小结

事件处理的核心在于如下操作:

(1)注册监听程序;

(2)根据指定的事件编写指定的处理程序;

(3)在事件处理类之中完成事件的处理操作。

2. 单击事件

2.1 知识点

(1)掌握单击事件的使用及处理;

(2)使用单击事件完成常见操作程序的开发。

2.2 具体内容

处理单击事件的处理接口是OnClickListener,里面需要覆写的方法是OnClick方法。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context=".OnClickActivity" >
    
    <EditText
          android:id="@+id/edt"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
           />
    
    <Button 
          android:id="@+id/but"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="显示输入的内容" 
        />
    
    <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
         />

</LinearLayout>

 

package com.example.onclickproject;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class OnClickActivity extends Activity {
    EditText edt = null;
    TextView tv = null;
    Button but = null;
	 
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_on_click);
        this.edt = (EditText) super.findViewById(R.id.edt);
        this.but = (Button) super.findViewById(R.id.but);
        this.tv  = (TextView) super.findViewById(R.id.tv);
        this.but.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				String inputText = edt.getText().toString();//取得文本输入的内容
				tv.setText(inputText);
			}
		});
    }


   
}

以上的程序完成功能就是讲EditText当中输入的内容显示到TextView当中,在这里我们再次回顾单击事件的处理过程。

2.3 小结

(1)单击事件为View本身所定义的一种常见事件;

(2)在使用单击事件可以使用内部类或者是匿名内部类的方式进行事件处理。

3. 单选钮与OnCheckedChangeListener

3.1 知识点

(1)使用单选钮中的选项改变事件进行操作。

3.2 具体内容

范例:将用户选择的单选选项的值放到TextView去显示

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context=".OnCheckedChangeListenerActivity" >
    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="请选择性别:" />
    <RadioGroup 
        android:id="@+id/rg"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:checkedButton="@+id/male"
        
        >
        <RadioButton 
            android:id="@+id/male"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="男"
            />
        <RadioButton 
            android:id="@+id/female"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="女"
            />
        
        
        
    </RadioGroup>

</LinearLayout>

 

package com.example.oncheckedchangerlistenerproject;

import android.app.Activity;
import android.os.Bundle;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TextView;

public class OnCheckedChangeListenerActivity extends Activity {
    RadioGroup rg = null;
    RadioButton male =null;
    RadioButton female = null;
    TextView tv =null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_on_checked_change_listener);
        rg = (RadioGroup) super.findViewById(R.id.rg);
        male = (RadioButton) super.findViewById(R.id.male);
        female = (RadioButton) super.findViewById(R.id.female);
        tv = (TextView) super.findViewById(R.id.tv);
        rg.setOnCheckedChangeListener(new OnCheckedChangeListener() {
			
			@Override
			public void onCheckedChanged(RadioGroup group, int checkedId) {
				String str = null;
				if(male.getId()==checkedId){
					tv.setText("选中的性别是男");
				}else{
					tv.setText("选中的性别是女");
				}
				
			}
		});
    }


    
}

这里如果选项存在多个的话,那么判断需要进行多次。

内部类注册监听与匿名内部类注册监听的区别:最明显的区别就是看这个事件是否只执行一次。

如果说一个Activity当中存在多个同种类型的事件监听,那么我们使用内部类注册,就可以在多做事件源判断的基础上将这些监听进行统一的注册,在这种情况下,使用内部类明显是更合适的可以节约代码同时也能让代码更便于阅读。如果仅仅是单个事件(只是用一次的监听)那么我们可以选择匿名内部类。

3.3 小结

(1)OnCheckedChange事件可以用于选项改变时进行监听,使用.

(2)OnCheckedChangeListener接口可以完成事件的监听处理。

4. 下拉列表框与OnItemSelectedListener

4.1 知识点

(1)使用事件监听实现对Spinner组件的操作;

(2)完成级联菜单的开发。

4.2 具体内容

 

下拉列表有一下一些监听操作,对应的监听注册方法有:

       ·单击选项:setOnItemClickListener

       ·选项改变:setOnItemSelectListener

       ·长按事件:setOnItemLongClickListener

范例:写一个省市联动的例子

<?xml version="1.0" encoding="utf-8"?>
<resources>
       <string-array name="province">
           <item>甘肃</item>
           <item>山西</item>
           <item>宁夏</item>
       </string-array>
</resources>

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">下拉列表监听</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string name="selectPro">请选择省份</string>
    <string name="selectCity">请选择城市</string>
</resources>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context=".SpinnerListenerActivity" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="请选择所在省份" />
    <Spinner 
        android:id="@+id/province"
        android:prompt="@string/selectPro"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:entries="@array/province"
        />
    <Spinner 
        android:id="@+id/city"
        android:prompt="@string/selectCity"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        
        />
</LinearLayout>

package com.example.spinnerlistenerproject;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

public class SpinnerListenerActivity extends Activity {
    Spinner province,city = null;
    String s[][] = new String[][]{{"兰州","定西","武威","酒泉"},
    		{"西安","咸阳","榆林","宝鸡"},{"银川","吴忠","石嘴山","乌海"}};
    ArrayAdapter<CharSequence> array = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_spinner_listener);
        this.province = (Spinner) super.findViewById(R.id.province);
        this.city = (Spinner) super.findViewById(R.id.city);
        this.province.setOnItemSelectedListener(new OnItemSelectedListener() {

			@Override
			public void onItemSelected(AdapterView<?> arg0, View arg1,
					int arg2, long arg3) {
				array = new ArrayAdapter<CharSequence>(SpinnerListenerActivity.this, 
						android.R.layout.simple_spinner_item,s[arg2]);
				array.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
				city.setAdapter(array);//给下拉列表设置选项
				
			}

			@Override
			public void onNothingSelected(AdapterView<?> arg0) {
				// 没有这个需求,就什么都不做,但是,由于这是来自接口的方法,所有我们必须这里覆写一下
				
			}
		});
    }


    
}

4.3 小结

(1)下拉列表可以使用OnItemSelectedListener接口进行监听;

(2)使用级联菜单时只需要将子菜单的内容重新设置即可。

5. 监听日期与时间的改变

5.1 知识点

(1)掌握日期及时间的事件处理操作;

(2)可以利用事件动态取得修改后的日期时间。

5.2 具体内容

范例:将日期yyyy-MM-dd HH:mm形式显示日期在文本组件中,只要日期或者时间改变了,那么文本组件中的内容相应改变。

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".DateAndTimeListenerActivity" >

    <TableRow 
        android:orientation="vertical"
        >
        <EditText
            android:id="@+id/edt"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="此处显示时间日期"
            />
        
    </TableRow>
    
    
    <TableRow 
        android:orientation="horizontal"
        >
        <DatePicker
            android:id="@+id/dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
        <TimePicker 
            android:id="@+id/tp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
        
    </TableRow>

</TableLayout>

 

package com.example.dateandtimelistener;

import android.app.Activity;
import android.os.Bundle;
import android.widget.DatePicker;
import android.widget.DatePicker.OnDateChangedListener;
import android.widget.EditText;
import android.widget.TimePicker;
import android.widget.TimePicker.OnTimeChangedListener;

public class DateAndTimeListenerActivity extends Activity {
    DatePicker dp = null;
    TimePicker tp =null;
    EditText edt = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_date_and_time_listener);
        this.dp = (DatePicker) super.findViewById(R.id.dp);
        this.tp = (TimePicker) super.findViewById(R.id.tp);
        this.edt = (EditText) super.findViewById(R.id.edt);
        this.tp.setIs24HourView(true);
        //特别注意下,DatePicker监听的注册和其他的组件有不同
        this.dp.init(this.dp.getYear(),this.dp.getMonth(),this.dp.getDayOfMonth(),new OnDateChangedListener() {
			
			@Override
			public void onDateChanged(DatePicker view, int year, int monthOfYear,
					int dayOfMonth) {
				initTime();
				
			}
		});
        this.tp.setOnTimeChangedListener(new OnTimeChangedListener() {
			
			@Override
			public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
				initTime();
				
			}
		});
    }
   
    public void initTime(){//此方法用于修改编辑框中的内容
    	String input = null;
    	input = this.dp.getYear()+"-"+(this.dp.getMonth()+1)+"-"+this.dp.getDayOfMonth()+" "+this.tp.getCurrentHour()
    			    +":"+this.tp.getCurrentMinute();
    	this.edt.setText(input);
    }

    
}

5.3 小结

(1)日期选择器的监听接口为:android.widget.DatePicker.OnDateChangedListener;

(2)时间选择器的监听接口为:android.widget.TimePicker.OnTimeChangedListener;

6. 焦点事件

6.1 知识点

(1)掌握焦点的操作及相关事件处理操作。

6.2 具体内容

范例:说明焦点事件的处理,文本输入框失去焦点的时候显示文本输入框中的内容。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context=".OnFocusListenerActivity" >

    <EditText 
        android:id="@+id/edt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="请输入内容"
        />
    <TextView 
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="我是内容"
        />
    <EditText 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="我是焦点"
        />
</LinearLayout>

 

package com.example.onfocuslistenerproject;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.widget.EditText;
import android.widget.TextView;

public class OnFocusListenerActivity extends Activity {
    EditText edt = null;
    TextView tv = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_on_focus_listener);
        this.edt = (EditText) super.findViewById(R.id.edt);
        this.tv = (TextView) super.findViewById(R.id.tv);
        edt.setOnFocusChangeListener(new OnFocusChangeListener() {
			@Override
			public void onFocusChange(View v, boolean hasFocus) {
				
				if(hasFocus){//得到焦点
					edt.setText("");
				}else{
				    tv.setText(edt.getText());	
				}
			}
		});
    }


   
    
}

6.3 小结

(1)焦点事件主要是在组件获得或失去焦点时进行处理操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/665008.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python抢单软件:如何优化SEO?

Python抢单软件&#xff1a;如何优化SEO&#xff1f; 导言 随着互联网技术的飞速发展&#xff0c;越来越多的人开始关注SEO&#xff08;Search Engine Optimization&#xff09;技术。而对于Python编程工程师来说&#xff0c;了解SEO技术也是非常重要的。那么&#xff0c;如何…

day10 伪操作与混合编程

伪操作 伪操作&#xff1a;不会生成代码&#xff0c;只是在编译之前告诉编译器怎么编译 .global symbol 将symbol声明成全局符号.local symbol 将symbol声明成局部符号.equ DATA, 0xFFMOV R1, #DATA.macro FUNCMOV R1, #1MOV R2, #2.endmFUNC.if 0MOV R1, #1MOV R2, #2.endif…

简要介绍 | 快速傅里叶变换:从原理到应用

注1&#xff1a;本文系“简要介绍”系列之一&#xff0c;仅从概念上对快速傅里叶变换进行非常简要的介绍&#xff0c;不适合用于深入和详细的了解。 快速傅里叶变换&#xff1a;从原理到应用 Denoising Data with Fast Fourier Transform 1. 背景介绍 傅里叶变换&#xff08;F…

vcruntime140_1.dll修复,vcruntime140_1.dll丢失推荐的修复方法-一键修复

vcruntime140_1.dll是什么什么文件呢&#xff1f;为什么电脑在运行一些游戏的时候会出现丢失vcruntime140_1.dll&#xff0c;然后游戏运行失败?这个dll文件是电脑重要的运行库文件。丢失了会导致很多程序无法运行。 本教程操作系统&#xff1a;Windows vcruntime140_1.dll丢失…

第十四章 json模块

1. json模块介绍 Python 中的json 模块提供了对JSON 的支持&#xff0c;用于将JSON 格式字符串转换为Python 对象。首先需要了解一下什么是JSON。 什么是JSON JSON 是基于JavaScript 语言的轻量级的数据交换格式&#xff0c;是JavaScript 对象的表示法&#xff08;JavaScrip…

mariadb 高可用集群

目录 1.相同操作&#xff1a;修改hosts文件 把四台机IP写进去 2. www 管理机 4.管理 简介&#xff1a; MHA&#xff08;Master High Availability&#xff09;目前在MySQL高可用方面是一个相对成熟的解决方案&#xff0c;它由日本DeNA公司youshimaton&#xff08;现就职于…

C51/C52--LCD1602

目录 一、LCD1602简介 二、LCD1602的工作&#xff08;显示&#xff09;原理 三、技术参数 四、外形参数&#xff0c;引脚功能 五、连接方式 六、示例程序与结果 一、LCD1602简介 LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏&#xff0…

chatgpt赋能python:如何使用Python找出重复元素

如何使用Python找出重复元素 在Python编程中&#xff0c;有时候需要查找并删除重复的元素。这些元素可以是列表、字符串等数据类型。在本文中&#xff0c;将介绍如何使用Python查找并删除重复元素。以下是我们将要涉及到的一些主题&#xff1a; 为什么需要查找重复元素&#…

深挖面试题讲解

面试题讲解&#x1f374; 文章目录 面试题讲解&#x1f374;和equals()的区别&#x1f354;1️⃣注意事项2️⃣明确问题3️⃣总结 什么是HashCode&#x1f347;1️⃣HashCode的描述2️⃣常见误区3️⃣hashCode的作用4️⃣总结 String、StringBuffer、StringBuilder的区别&#…

chatgpt赋能python:Python编程:如何找出给定的n个数中的最大值及其对应的最小下标

Python编程&#xff1a;如何找出给定的n个数中的最大值及其对应的最小下标 当需要在一组数字中找到最大值时&#xff0c;Python提供了内置函数 max() 。 但是&#xff0c;如果我们需要找出最大值的同时还需要找出其最小下标&#xff0c;该怎么办呢&#xff1f; 在本文中&#…

初始化命令

创建项目 vue2 vue3 create demo vue3 vue3 create demo vue2 webpack vue2 init webpack demo vue3 vite yarn create vite demo --template vue sass cnpm下载 --save-dev -D 开发环境 --save -S 生产环境 cnpm i node-sass4.14.1 sass-loader7.3.1 --save-…

[架构之路-215]- 架构 - 概念架构 - 模块(Module)、组件(Component)、包(Package)、对象、函数的区别

前言&#xff1a; 在软件架构中&#xff0c;一个重要的任务就是切分系统&#xff0c;而切分系统进程涉及到一个基本的概念&#xff0c;如模块&#xff08;Module&#xff09;、组件&#xff08;Component&#xff09;、包&#xff08;Package&#xff09;、对象&#xff0c;本…

管理类联考——写作——技巧篇——论证有效性——谬误概念汇总简释

批判性思维常见逻辑谬误 有些错误出现在我们澄清或定义某个观点的时候&#xff0c;有些错误出现在我们收集证据或者用证据和理由支撑某个观点的时候&#xff0c;有些错误出现在我们尝试从证据得出结论的时候&#xff0c;有些错误甚至出现在我们评估他人的观点或者理由的时候。…

美味度配方

8 种配料每种配料可以放 1 到 5 克&#xff0c;美味度为配料质量之和&#xff0c;给定一个美味度 n&#xff0c;求解 8 种配料的所有搭配方案及方案数量 。 (本笔记适合学了 Python 循环&#xff0c;正在熟炼的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a…

chatgpt赋能python:把图像放在中间的SEO优化指南

把图像放在中间的SEO优化指南 当我们在设计网站或博客时&#xff0c;经常会使用图像来增加文章的吸引力和清晰度。但是&#xff0c;图像的位置对于搜索引擎优化&#xff08;SEO&#xff09;很重要&#xff0c;因为搜索引擎无法理解和索引图像的内容&#xff0c;所以我们需要通…

chatgpt赋能python:Python抢商品:自动化实现秒杀购物的利器

Python抢商品&#xff1a;自动化实现秒杀购物的利器 随着互联网和电商的高度融合&#xff0c;电商平台受到越来越多的用户关注和青睐。在线购物已成为人们日常生活中必不可少的一部分&#xff0c;不管是网购小白还是技术大牛&#xff0c;都喜欢在各种平台上刷到想要的商品。但…

chatgpt赋能python:让Python帮助你轻松抢券

让Python帮助你轻松抢券 在这个数字化时代&#xff0c;抢购已成为电商平台上最为火热的活动之一。限时抢购、秒杀活动、优惠券折扣等等&#xff0c;都吸引了大量消费者的关注。然而&#xff0c;随着购物热潮的兴起&#xff0c;商品的库存有限&#xff0c;抢购难度越来越大。在…

高效能研发团队-使用自动化改进效率

在开发过程中利用自动化技术&#xff0c;可以帮助我们&#xff1a; 节约开发人员的时间&#xff0c;让他们做更有价值的事情。减少了开发流程中的人员依赖和相互等待的情况。加快了迭代速度&#xff0c;提前把问题暴露出来。另外一种形式的知识沉淀&#xff0c;减少人员流动带…

【学习日记2023.6.19】 之 RabbitMQ服务异步通信_消息可靠性_死信交换机_惰性队列_MQ集群

文章目录 服务异步通信-高级篇4. 消息可靠性4.1 生产者消息确认4.1.1 修改配置4.1.2 定义Return回调4.1.3 定义ConfirmCallback 4.2 消息持久化4.2.1 交换机持久化4.2.2 队列持久化4.2.3 消息持久化 4.3 消费者消息确认4.3.1 演示none模式4.3.2 演示auto模式 4.4 消费失败重试机…

第六章 calendar模块(日历)

1. calendar模块介绍 calendar 模块&#xff08;日历模块&#xff09;的方法都是与日历相关的&#xff0c;例如生成指定年份的日历、判断指定年份是否为闰年等。默认情况下&#xff0c;这些日历把星期一当作一周的第一天&#xff0c;星期天为一周的最后一天&#xff08;按照欧…