- 博客(46)
- 收藏
- 关注
原创 Android Observe
代码解释很全面,复制到IDE中,可以更方便查看如何使用的祝君早日掌握package observe;import java.util.Observable;import java.util.Observer;//TODO 总体流程:先执行具体类中的——————引用自observer的抽象change方法,// 在执行observer中的update方法,// 最后执行Observable中的具体设计接口,//
2021-11-30 14:50:08 2031
原创 Android JNI开发(第一篇)
一 前导1、前导 2、什么是NDK(Native Develop Kit 本地开发) 3、为什么使用NDK 4、NDK到SO 5、JNI二 什么是NDK(Native Develop Kit 本地开发)第三方应用完成可以通过JNI调用自己的C动态度。于是NDK就应运而生了。官网地址:Android NDK官网Android NDK 是一套允许您使用原生代码语言(例如C和C++) 实现部分应用的工具集。在开发某些类型应用时,这有助于您重复使用以这些语言编写的代码库。...
2021-10-28 16:20:23 605
原创 蓝牙的配置与调用
Android蓝牙音乐:Android蓝牙音乐_li6472的博客-CSDN博客解释都在代码里。可以通过复制到IDEL中,然后慢慢分析,很全面,直接用就可以一 AndroidManifest.xml中添加权限 <!-- 蓝牙 --> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="andr...
2021-10-19 18:11:09 1560
原创 Android蓝牙音乐
一 蓝牙权限在apk中的AndroidManifest.xml中要有以下语句获得蓝牙相关权限: <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission...
2021-10-19 13:56:59 2430 1
原创 ViewModel(Factory 与 key)
一 为什么要学习ViewModel自定义实例?那么你可能会疑问了,使用 ViewModelProviders.of(getActivity()).get(ViewModel.class); 创建ViewModel这么简单轻松,为什么还要自己构建Factory呢。原因有以下几点:如果你继承的ViewModel类是有参构造,那么上面这个方式是不支持在实例ViewModel的传参的,所以需要自己构建Factory类 一个Activity可能根据业务会有多个不同的ViewModel,那么根据不同的业务下配
2021-09-14 16:17:58 994
原创 MutableLiveData详解
一 LiveData是干什么的?1.首先LiveData其实与数据实体类(POJO类)是一样的东西,它负责暂存数据.2.其次LiveData其实也是一个观察者模式的数据实体类,它可以跟它注册的观察者回调数据是否已经更新.3.LiveData还能知晓它绑定的Activity或者Fragment的生命周期,它只会给前台活动的activity回调(这个很厉害).这样你可以放心的在它的回调方法里直接将数据添加到View,而不用担心会不会报错.(你也可以不用费心费力判断Fragment是否还存活)二.
2021-09-14 15:36:48 15415
原创 fragment调用方法isadded()、isvisible()、isDetached()
一 public final boolean isAdded()如果该Fragment对象被添加到了它的Activity中,那么它返回true,否则返回false。二 public final boolean isDetached()如果该Fragment已经明确的从UI中分离,那么它返回true。也就是说,在该Fragment对象上使用FragmentTransaction.detach(Fragment)方法。该方法在API Level 13中被引入。三 public final b
2021-09-14 11:24:09 1007
原创 一个使用Room库的实例
1.添加依赖:implementation 'android.arch.persistence.room:runtime:1.0.0'annotationProcessor 'android.arch.persistence.room:compiler:1.0.0'2.创建Entity实体类:每个Entity实体对象都会映射为表中的某一行@Entity(tableName = "student") //使用Entity注解定义表名为studentpublic class
2021-09-13 13:26:03 157
原创 Room库
一 引言Room是Jetpack组件中一个对象关系映射(ORM)库。可以很容易将 SQLite 表数据转换为 Java 对象。Room 在 SQLite 上提供了一个抽象层,以便在充分利用 SQLite 的强大功能的同时,能够流畅地访问数据库。 支持与LiveData、RxJava、Kotlin协成组合使用。 Google 官方强烈推荐使用Room。二 优点编译期检查,Room会在编译的时候验证每个@Query和@Entity等,它不仅检查语法问题,还会检查是否有该表,这就意味着几乎没有任
2021-09-13 13:09:41 355
原创 Android中XML的命名空间、自定义属性
命名空间里面存放的是特定属性的集合,android、tools、app(自定义命名空间)1、androidxmlns:android=”http://schemas.android.com/apk/res/android”xmlns:即xml namespace,声明我们要开始定义一个命名空间了android:称作namespace-prefix,它是命名空间的名字http://schemas.android.com/apk/res/android:这看起来是一个URL,但是这...
2021-09-10 16:48:17 512
原创 android之Fragment
一 Fragment的生命周期图二 核心要点:官方文档说创建Fragment时至少需要实现三个方法:onCreate( ),onCreateView( ),OnPause( ); 不过貌似只写一个onCreateView也是可以的... Fragment的生命周期和Activity有点类似:三种状态: Resumed:在允许中的Fragment可见 Paused:所在Activity可见,但是得不到焦点 Stoped: ①调用addToBackStack(),Fragment被添加到Bc
2021-08-31 14:35:49 139
原创 android之Intent之复杂数据的传递
1.Intent传递简单数据还记得我们在Activity那里学过如何在两个Activity中互相传递简单数据的方法吗?就是可以直接通过调用Intent的putExtra()方法存入数据,然后在获得Intent后调用getXxxExtra获得 对应类型的数据;传递多个的话,可以使用Bundle对象作为容器,通过调用Bundle的putXxx先将数据 存储到Bundle中,然后调用Intent的putExtras()方法将Bundle存入Intent中,然后获得Intent以后, 调用getExt
2021-08-31 14:01:12 671
原创 android之intent
四大组件间的 枢纽——Intent(意图)startActivity(Intent)/startActivityForResult(Intent):来启动一个Activity startService(Intent)/bindService(Intent):来启动一个Service sendBroadcast:发送广播到指定BroadcastReceiver 另外别忘了我们在注册四大组件时,写得很多的Intent-Filter1.显式Intent与隐式Intent的区别显式Inten
2021-08-31 13:37:07 121
原创 android之activity数据传递
一 Activity间的数据传递:二 多个Activity间的交互(后一个传回给前一个)三 随时关闭所有Activity有时我们可能会打开了很多个Activity,突然来个这样的需求,在某个页面可以关掉 所有的Activity并退出程序!好吧,下面提供一个关闭所有Activity的方法, 就是用一个list集合来存储所有Activity!具体代码如下:public class ActivityCollector { public static LinkedL
2021-08-31 11:38:26 249
原创 android之activity
一 介绍Activity是一个应用程序的组件,他在屏幕上提供了一个区域,允许用户在上面做一些交互性的操作, 比如打电话,照相,发送邮件,或者显示一个地图!Activity可以理解成一个绘制用户界面的窗口, 而这个窗口可以填满整个屏幕,也可能比屏幕小或者浮动在其他窗口的上方!二 Activity的概念与Activity的生命周期图:注意事项:1. onPause()和onStop()被调用的前提是: 打开了一个新的Activity!而前者是旧Activity还可见的状态;后者是旧Activ
2021-08-31 11:22:45 177
原创 文本变化监听
1.监听EditText的内容变化TextWatcher可以调用EditText.addTextChangedListener(mTextWatcher); 为EditText设置内容变化监听!实现该类需实现三个方法:public void beforeTextChanged(CharSequence s, int start,int count, int after); public void onTextChanged(CharSequence s, int start, int b
2021-08-30 16:13:17 175
原创 监听与回调
例如:TouchListener与OnTouchEvent的比较TouchListener是基于监听的,而OnTouchEvent则是基于回调的1.基于监听的TouchListener代码解析:设置一个ImageView,然后setOnTouchListener,重写onTouch方法即可实现代码: main.xml<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2021-08-30 15:56:32 630
原创 Handler消息传递机制
Activity中UI组件中的信息传递Handler1.Handler:2.Handler类的引入:3.Handler的执行流程图:流程图解析: 相关名词UI线程:就是我们的主线程,系统在创建UI线程的时候会初始化一个Looper对象,同时也会创建一个与其关联的MessageQueue; Handler:作用就是发送与处理信息,如果希望Handler正常工作,在当前线程中要有一个Looper对象 Message:Handler接收与处理的消息对象 MessageQue
2021-08-30 15:41:07 315
原创 回调的事件处理机制
1.方法回调 将功能定义与功能分开的一种手段,一种解耦合的设计思想;在Java中回调是通过接口来实现的, 作为一种系统架构,必须要有自己的运行环境,且需要为用户提供实现接口;实现依赖于客户,这样就可以 达到接口统一,实现不同,系统通过在不同的状态下"回调"我们的实现类,从而达到接口和实现的分离!2基于回调的事件处理机制使用场景1)自定义view当用户在GUI组件上激发某个事件时,组件有自己特定的方法会负责处理该事件 通常用法:继承基本的GUI组件,重写该组件的事件处理方法,即自...
2021-08-30 15:05:55 813
原创 android事件监听处理机制
1.基于监听的时间处理机制模型流程模型图:Step 1:为某个事件源(组件)设置一个监听器,用于监听用户操作Step 2:用户的操作,触发了事件源的监听器Step 3:生成了对应的事件对象Step 4:将这个事件源对象作为参数传给事件监听器step 5:事件监听器对事件对象进行判断,执行对应的事件处理器(对应事件的处理方法)2.五种不同的使用形式:我们以下面这个: 简单的按钮点击,提示Toast信息的程序;使用五种不同的形式来实现!1)直接用匿名内部类平时最常用
2021-08-30 14:37:28 548
原创 Git 服务器搭建
我们也可以自己搭建一台 Git 服务器作为私有仓库使用。接下来我们将以 Centos 为例搭建 Git 服务器。1、安装Git$ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel$ yum install git接下来我们 创建一个git用户组和用户,用来运行git服务:$ groupadd git$ useradd git -g git2、创建证书登录
2021-08-27 15:23:26 85
原创 Git Gitee
大家都知道国内访问 Github 速度比较慢,很影响我们的使用。如果你希望体验到 Git 飞一般的速度,可以使用国内的 Git 托管服务——Gitee(gitee.com)。Gitee 提供免费的 Git 仓库,还集成了代码质量检测、项目演示等功能。对于团队协作开发,Gitee 还提供了项目管理、代码托管、文档管理的服务,5 人以下小团队免费。接下来我们学习一下如何使用 Gitee。由于我们的本地 Git 仓库和 Gitee 仓库之间的传输是通过SSH加密的,所以我们需要配置验证信息。1
2021-08-27 15:21:19 96
原创 Git 远程仓库(Github)
Git 并不像 SVN 那样有个中心服务器。目前我们使用到的 Git 命令都是在本地执行,如果你想通过 Git 分享你的代码或者与其他开发人员合作。 你就需要将数据放到一台其他开发人员能够连接的服务器上。本例使用了 Github 作为远程仓库,你可以先阅读我们的Github 简明教程。添加远程库要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,命令格式如下:git remote add [shortname] [url]本例以 Github 为例作为远程仓库..
2021-08-27 15:13:31 437
原创 Git 标签
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签。比如说,我们想为我们的 runoob 项目发布一个"1.0"版本。 我们可以用 git tag -a v1.0 命令给最新一次提交打上(HEAD)"v1.0"的标签。-a 选项意为"创建一个带注
2021-08-27 14:16:29 104
原创 Git 查看提交历史
Git 提交历史一般常用两个命令:git log- 查看历史提交记录。 git blame <file>- 以列表形式查看指定文件的历史修改记录。git log$ git log --reverse --oneline我们可以用 --oneline 选项来查看历史记录的简洁的版本。$ git log --oneline$ git log --onelined5e9fc2 (HEAD -> master) Merge branch 'change_site'..
2021-08-27 14:01:49 760
原创 Git 分支管理
几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。有人把 Git 的分支模型称为必杀技特性,而正是因为它,将Git从版本控制系统家族里区分出来。创建分支命令:git branch (branchname)切换分支命令:git checkout (branchname)当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。合并分支命令:git me..
2021-08-27 13:33:47 146
原创 Git 基本操作
git clone、git push、git add、git commit、git checkout、git pull说明:workspace:工作区 staging area:暂存区/缓存区 local repository:版本库或本地仓库 remote repository:远程仓库一个简单的操作步骤:git init - 初始化仓库。git add . - 添加文件到暂存区。git commit - 将暂存区内容添加到仓库中。创建仓库命令命令 说明 .
2021-08-27 11:38:21 87
原创 Git 创建仓库
一 git initGit 使用git init命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以git init是使用 Git 的第一个命令。在执行完成git init命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变。使用方法使用当前目录作为Git仓库,我们只需使它初始化。git init该命令执行完后会在当前目录生成一个 .git 目录。使用我们指定目录作为Git仓库。...
2021-08-27 11:33:34 544
原创 Git 工作区、暂存区和版本库
基本概念工作区:就是你在电脑里能看到的目录。 暂存区:英文叫 stage 或 index。一般存放在.git目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是 Git 的版本库。下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage/index),标记为 "master" 的是 ...
2021-08-27 10:49:38 81
原创 Git 工作流程
一般工作流程如下:克隆 Git 资源作为工作目录。 在克隆的资源上添加或修改文件。 如果其他人修改了,你可以更新资源。 在提交前查看修改。 提交修改。 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。...
2021-08-27 09:11:45 87
原创 Git 安装配置
一 Linux 平台上安装Git 的工作需要调用 curl,zlib,openssl,expat,libiconv 等库的代码,所以需要先安装这些依赖工具。在有 yum 的系统上(比如 Fedora)或者有 apt-get 的系统上(比如 Debian 体系),可以用下面的命令安装:各 Linux 系统可以使用其安装包管理工具(apt-get、yum 等)进行安装Debian/Ubuntu(安装命令)$ apt-get install libcurl4-gnutls-dev libex
2021-08-26 17:28:38 264
原创 Git详述(一)
一 简述1 Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。2 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。3 Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。二 Git 与 SVN 区别Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。1、Git 是分布式的,SVN 不是2、Gi.
2021-08-26 17:01:08 118
原创 线程之Runnable接口
一 实现Runnable接口。Runnable只是一个接口,它里面只有一个run()方法,没有start()方法, public interface Runnable{ public void run(); } Thread类,有一个构造方法,参数是Runnable对象,也就是说可以通过Thread类来启动Runnable实现多线程。class MyThread implements Runable{ @Override ..
2021-08-26 16:43:49 452
原创 结合MVVM架构和架构组件LiveData实现Activity和Fragment的页面交互
结合MVBVM架构和架构组件LiveData实现Activity和Fragment的页面交互
2021-08-20 17:08:48 487
原创 Default interface methods are only supported starting with Android N (--min-api 24):
报错(Default interface methods are only supported starting with Android N (--min-api 24): void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner))Default interface methods are only supported starting with Android N (
2021-08-20 15:57:23 3213 1
原创 ViewModel速成
一 主要应用场合ViewModel主要是拿来获取或者保留Activity/Fragment所需要的数据的,开发者可以在Activity/Fragment中观察ViewModel中的数据更改(这里需要配合LiveData食用).二 优点ViewModel旨在以生命周期意识的方式存储和管理用户界面相关的数据,它可以用来管理Activity和Fragment中的数据.还可以拿来处理Fragment与Fragment之间的通信等等.当Activity或者Fragment创建了关联的ViewModel
2021-08-19 14:46:36 438
原创 LifeCycle速成
学习一个新知识之前应该知道他的作用和应用场合是什么:Lifecycle类持有Activity 或 Fragment等组件的生命周期信息,并且允许其他对象观察这些信息。Lifecycle内部使用了两个枚举来跟踪其关联组件的生命周期状态:Event和State。祥见下面分析。可以通过调用Lifecycle类的 addObserver() 方法来添加观察者,如下: getLifecycle().addObserver(new TestLifeCycle());5一 导包1 首先...
2021-08-19 11:27:55 318
原创 LiveData速成
一 解释定义LiveData是一个数据持有类特征 数据可以被观察者订阅; 能够感知组件(Fragment、Activity、Service)的生命周期; 只有在组件出于激活状态(STARTED、RESUMED)才会通知观察者有数据更新; 使用实现了LifecycleOwner接口优点防止篇幅过长自己百度吧,看一下就好目录一 解释定义特征使用优点...
2021-08-18 18:06:02 652
原创 MVVM框架使用之xml详解
(字体放大会促进学习兴趣哦)一 DataBinding的标签(compilerCommon这个jar包中的android/databinding/tool/store/LayoutFileParser.java这个类中找到。)- layout标签(根标签)- data标签:class属性- variable标签:type属性、name属性- import标签:type属性、alias属性layout标签1 layout标签内部只能有一个直接子view,多于1个就会报错,这个和Scr
2021-08-18 16:32:39 840
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人