自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 收藏
  • 关注

原创 Mac-自动操作 实现双击即可执行shell脚本

在Mac上运行shell脚本,总是需要开启终端窗口执行,比较麻烦。

2024-03-14 17:29:57 1544 1

原创 使用SSH推拉Github代码

ssh使用手册

2024-03-01 16:12:52 552

原创 Mac_通过chmod处理文件权限

通过chmod修改文件权限

2023-12-26 15:35:11 1344

原创 Mac使用Python的tkinter显示异常解决方案

tkinter

2023-12-25 16:34:08 985

原创 Java_注解

/ 定义一个自定义注解// 注解元素,默认值为空字符串//定义了一个名称为 count, 类型为int, 默认值为0的 注解元素// 类的内容。

2023-11-23 22:45:32 422

原创 Service启动与销毁时的生命周期探究

前言启动Service的方法有两种 StartService 和 bindService,但是在它们调用之后,再调用stopService和unbindService时,service会表现为调用不同的生命周期。我们在对Service进行插件化时,如果需要模拟更真实的Service的生命周期,需要梳理清楚其调用时机与调用关系(不考虑onStart函数)启动服务情况1依次调用方法生命周期表现startServiceonCreate() onStartCommon()sta

2022-05-05 16:50:50 330 1

原创 Linux常用命令

1. 目录及文件操作命令1.1 切换目录cd /切换到根目录cd /user切换到根目录下的user目录cd ..切换到上一级目录cd ~切换到home目录cd -切换到上次访问的目录/代表根目录./代表当前目录1.2 查看目录ls查看当前目录文件ls -a查看当前目录文件 包含隐藏ls -l查看当前目录文件详细信息ls /dir查看当前目录中 dir目录下的信息1.3 创建目录或文件

2022-03-26 21:45:19 1194

原创 Activity启动流程 基于android11

ActivityManagerServicestartActivity()ActivityTaskManagerServicestartActivity()startActivityAsUser()getActivityStartController() ...obtainStarter()ActivityStartControllerobtainStarter() ...execute()​DefaultFactoryFactory.obtain //此处生成ActivityStarte

2021-09-14 16:02:20 645

原创 Activity_通过Hook PackageManager了解动态代理

示例 private static void hookPM() { try { //获取ActivityThread对象 Class<?> activityThreadClass = Class.forName("android.app.ActivityThread"); Field field = activityThreadClass.getDeclaredField("sCurrentActiv

2021-08-18 17:51:52 739

原创 如何生成smali文件

1. 创建任意java文件(以Hello.java为例)public class Hello { private static String HELLO_WORLD = "Hello World!"; public static void main(String[] args) { System.out.println(HELLO_WORLD); }}2. 将java文件生成.class文件执行 javac Hello.java 生成 Hell

2021-08-11 13:45:02 407

原创 敏捷开发_Studio中的模板信息

快速为方法添加注释原始方法在方法上方输入 /**,敲下 Enter 即可快速生成方法注释为方法注释添加快捷键(下图设置快捷键: alt+d)在文件中添加代码模板$des$ : 不设置函数,用于光标定位$date$ : 设置函数 date(),可自动生成日期模板示例:/** * * @describe $des$ * * @author ypf * * @date $date$ * * */...

2021-08-10 17:50:11 71

原创 解决pull/push总需输入用户名和密码的问题

操作步骤切换目录(进入包含.git文件夹的目录下)使用证书助手的store库git config credential.helper store执行后会在 .git/config文件下自动添加如下文本[credential] helper = store重新执行一次git远程库的pull/push操作,并输入用户名和密码,此次输入会被保存后续操作远程库将不再需要输入用户名和密码如果想删除存储的用户名和密码,执行如下语句git credential-manager uninstall

2021-08-10 16:50:51 92

原创 Android系统的启动流程

2021-07-24 09:03:31 105 1

原创 Java四大引用

强引用GC不会回收示例Object obj = new Object();软引用内存不足时回收,常用于记录缓存图片示例 private void test(){ User userObject = new User("小明",20); SoftReference<User> softReference = new SoftReference<>(userObject); userObject = null;

2021-07-16 11:38:23 51

原创 Android_Binder机制

Binder是什么Binder就是Android中的血管。在Android中我们所使用的Activity,Service等组件都需要和AMS通信,这种跨进程的通信就是通过Binder完成。我们的App和AMS不属于同一个进程机制: Binder是一种跨进程间通信机制驱动:Binder是一个虚拟物理设备驱动应用层: Binder是一个能发起通信的Java类...

2021-07-15 12:59:21 148

原创 PhotoShop基础知识

工具栏的使用1.移动工具 ( 快捷键: V)移动功能:选中图层 ,按住shift :在 水平 | 垂直 方向移动图层选中图层,按住 alt : 复制图层并移动选中图层,按住 shift + alt : 将上述两个功能结合创建画布功能右键移动工具图标 -> 选中画布功能 -> 创建任意大小的画布2.选框工具建立选区右键可以选择 选框类型在拓展工具中可以选择多个选框的组合模式3.套索工具套索工具: 生成不规则选区多边形套索工具: 生成多边形选区磁性套索工具

2021-07-10 00:42:06 111

原创 Handler工作机制及相关问题

Handler工作机制本身是一个传送带模型Handler向传送带上输送Message的搬运工调用 Handler.sendXXX() 发送MessagesendXXX相关函数,最后都会调用 Handler.enqueueMessage(),然后调用 MessageQueue.enqueueMessage()函数将message放置到MessageQueue即消息队列中中每一个Handler中都包含一个MessageQueue对象 ,该MessageQueue对象由 与该Handler 绑定

2021-07-09 14:05:52 146

原创 Jetpack_dataBinding

开始使用1. 在moudle的build.gradle中开启对databinding的支持 defaultConfig { applicationId "com.example.databinding_viewmodel_livedata" minSdkVersion 15 targetSdkVersion 30 versionCode 1 versionName "1.0" testInstrume

2021-07-04 22:53:03 194 1

原创 Jetpack_Viewmodel_liveData

ViewModelViewModel 可以理解为一个ViewModelStoreOwner(例如: AppCompatActivity)实现类的 数据存放容器;以AppCompatActivity为例 , 该容器的数据一直跟随activity存在,并在Activity销毁时才会被销毁,ViewModel中的数据, 在Activity意外重建时(旋转屏幕)不会丢失.ViewModel 与 其依附的Activity相关, 被存放在Activity的 ViewModelStore(可理解为Map集合)

2021-07-04 16:17:41 80

原创 Jetpack_LifeCycle

LifeCycle的好处可以创建感知生命周期的控件控件可以在内部管理自己的生命周期,降低耦合度省去了在各个界面生命周期中的重复代码,也降低了内存泄露的风险Activity Fragment Service Application均存在对LifeCycle的支持LifeCycle的使用内部实现采用了 观察者模式Activity Fragment Service Application相当于被观察者实现了LifecycleObserver接口的对象,可以作为观察者,添加进入被观察者

2021-07-02 19:45:25 68

原创 JNI示例

java调用Cjava中的native方法声明public class JniController { { System.loadLibrary("jniLib"); } //计算两数之和 public native int sum(int x,int y); //处理字符串 public native String sayHello(String s); //处理int数组 public native int[]

2021-06-28 15:52:23 168

原创 JNI中的实用方案

为包含native的类创建头文件将控制台转移到 …/main/java 目录下,如图所示:获取包含native方法的类的全类名,并执行如下命令以CallJavaController类为例javah com.example.jnidemo.CallJavaController将生成 .h文件放置到 jni目录中,与 .c文件同级目录,并在.c文件中引入#include "com_example_jnidemo_CallJavaController.h"...

2021-06-28 15:40:14 88

原创 Android JNI_环境配置

安装与配置1. 下载NDK如果你需要CMakeList.txt中使用一些高级的语法,则需要安装高版本的CMake2. 在Sutdio中配置下载的ndk3. 在main目录下创建 jni目录,并在该目录下创建 C文件文件名称可自定义,但是必须与下一步中CMakeList.txt文件中的源文件名相同4. 在app目录下创建 CMakeList.txt 文件文件名称必须是 CMakeList.txt,指定的源文件地址 必须是上一步中创建的C文件的相对地址,内容如下:#创建一个库(可通过

2021-05-31 14:49:58 1308

原创 C 指针

关于内存的知识点编程的本质其实就是操控数据,数据存放在内存中。内存寻址的最小单元是byte ( 1个byte 占据 8个bit,每个bit代表 0,1两种状态)内存地址:每一个byte所代表的内存空间的编号计算机的编号能力,代表了计算机的操作位数,如可编号 2^32 位,则为32位操作系统,内存地址的所有编号代表了内存地址空间变量的本质...

2021-05-21 16:44:45 113

原创 MySql 安装与配置

下载Mysql执行安装将Mysql的bin目录添加到环境变量的Path下在bin目录同级下创建my.ini配置文件,内容如下basedir 和 datadir 填写自己的mysql目录[mysqld]basedir=C:\Program Files\MySQL\MySQL Server 8.0\datadir=C:\Program Files\MySQL\MySQL Server 8.0\data\port=3306skip-grant-tables管理员模式下启动CMD,将路.

2021-05-19 00:39:43 53

原创 Git 处理忽略文件

Git已经成为我们日常开发中必不可少的工具,我们提交代码时,往往需要忽略一些构建所生成的文件,下面我们来看一下关于Git中的忽略文件的操作.gitignore 文件中添加相应忽略# 对应层级为 .git文件夹 所在位置的 相对层级,(与.git同目录为一级)# 忽略所有目录下的 111.text文件111.text# 忽略一级目录下的 111.text文件/111.text# 忽略二级目录下的 111.text文件/*/111.text# 忽略所有 .iml 为后缀的文件(级目录操作同

2021-05-17 13:28:47 610

原创 Flutter 网络请求 Dio

Json 与 Map 的转化把map数据转换成Json字符串json.encode(mapData);把json字符串转换成map数据json.decode(jsonStr);数据的请求初始化的数据应该在 initState() 中执行如果在build中请求数据,数据完成后调用 setState()方法, setState()回调build(),造成死循环并一直请求数据请求回来的数据,应该更关心与界面绑定的数据及其集合的引用,而不应过度关注具体指向的类型,从而规避类型转换异常问题

2021-05-16 21:38:42 238

原创 Flutter 自定义弹框 与 定时器

实现import 'package:flutter/material.dart';class CustomDialog extends Dialog { @override Widget build(BuildContext context) { // TODO: implement build return Material( //设置背景半透明 type: MaterialType.transparency, child: Center(

2021-05-16 20:23:17 352

原创 Flutter 系统弹框

生成普通弹框//其中build 定义返回widget ,所以可以自定义showDialog(context: context, builder: builder)生成底部弹框showModalBottomSheet(context: context, builder: bottomBuilder)关闭弹框//关闭弹框Navigator.pop(context);//关闭弹框时携带返回值 , 协同 async 和 await 关键字,由 showDialog | showModalBot

2021-05-16 19:04:18 964

原创 Flutter 表单组件

TextFieldTextField( controller: _userName, //设置最大支持行数 maxLines: 3, //设置最大支持长度(会在右下角显示字的个数) maxLength: 300, //设置为true时,变为密码框 注意: 设置为密码显示时,最大行数必须置为1 //obscureText: true, //监听文本变化

2021-05-16 17:28:09 221

原创 Flutter 实现TabLayout效果

何如实现第一步创建一个StatefulWidget组件,并继承SingleTickerProviderStateMixin抽象类(使用with关键字)第二步创建TabController参数,并在适当的位中实例化TabController在当前state组件中只创建一次,否则报错: XXX is a SingleTickerProviderStateMixin but multiple tickers were created.//vaync: 继承了SingleTickerProvid

2021-05-16 16:16:17 670 2

原创 Flutter 路由 实现界面跳转

界面跳转普通路由不携值Navigator.of(context).push( MaterialPageRoute(builder: (BuildContext context){ //此处放回被跳转的界面 return SearchPage(); }));携值在被跳转界面的构造方法中添加对应参数,实现传值效果Navigator.

2021-05-16 15:14:00 284

原创 Flutter 底部导航实现界面切换效果 BottomNavigationBar

setState()state.setState()会触发该节点及以下整个子树更新动态变化的Widget的判定条件,应该显式的出现在该State的build()方法中,使得Widget树可以清晰的感知变化BottomNavigationBar系统自带的底部导航栏currentIndex标识当前选中的角标currentIndex: 0,示例class MyStateApp extends StatefulWidget { @override _MyStateAppState

2021-05-16 08:33:09 1176

原创 Flutter 常用组件 Center Padding Column Row Expanded Card

Center它的宽高 等于child的宽高它将处于父布局的中心位置Container( width: 150, height: 150, color: Colors.blue, //该Center将处于Container区域的中心位置 child: Center( child: Text( "我是一个文本") ) )PaddingColumn

2021-05-14 19:25:27 215

原创 Flutter 流式布局_Wrap

spacing横轴间距spacing: 10,runSpacing纵轴间距runSpacing: 10,alignment主轴对齐方式alignment: WrapAlignment.start,runAlignment整体相对于父布局的对齐方式//child全部右对齐runAlignment: WrapAlignment.end,示例class WrapBody extends StatelessWidget { @override Widget bui

2021-05-14 19:03:49 244

原创 Flutter 层叠布局_Stack

Stack通过外层包裹Container来设置宽高,本身不具备宽高属性alignment统一设置children的位置//设置所有的child都中心对齐alignment: Alignment.center,Align设置child相对于Stack 的位置Align( child: Container( color: Colors.red, width: 20, height: 20, ), //设.

2021-05-14 18:54:52 287

原创 Flutter 网格布局_GridView

crossAxisCount定义GridView的列数(竖向时) / 定义GridView的行数(横向时)crossAxisCount: 3,scrollDirection定义GridView的滚动方向//横向scrollDirection: Axis.horizontal,//纵向scrollDirection: Axis.vertical,crossAxisSpacing & mainAxisSpacing定义GridView的item之间的间距(不包含与外

2021-05-14 18:07:09 840

原创 Flutter 列表_ListView

scrollDirection设置列表的方向scrollDirection: Axis.horizontal,ListTile系统提供的快速创建ListView的item的布局ListTile( title: Text('标题'), subtitle: Text('副标题'), //在前方设置图标 (图片接收的是 widget组件,可自定义) leading: Icon( //图标 Icons.category, //图标大小 size:

2021-05-14 17:42:07 731 1

原创 Flutter 图片组件_Image

width & height设置宽高 (当外层被Container包裹时,如果Container设置了宽高,则image的宽高设置失效)height: 150,width: 150,fit图片的显示样式/** * 图片显示样式 * fill: 铺满 * contain: 原比例显示 * cover: 中心裁剪 * */fit: BoxFit.containrepeat处理盒子中没有被图片覆盖的部分该如何显示/** * 处理盒子中没有被图片覆盖的部分该如

2021-05-14 17:25:32 409

原创 Flutter 文本组件_Text

textAlign文本的对齐方式//居中对齐textAlign: TextAlign.centertextScaleFactor设置 文字按现有大小放大的倍数//文本放大1.5倍textScaleFactor: 1.5,style设置文本样式TextStyle设置字体大小fontSize: 16,设置字体颜色color: Colors.red设置字体加粗fontWeight: FontWeight.bold,设置斜体fontStyle: Font

2021-05-14 16:30:19 185 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除