自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

mulanlong的博客

让代码插上翅膀去翱翔

  • 博客(95)
  • 收藏
  • 关注

原创 透明状态栏

一、闪屏页闪屏页就是app点击后打开的第一个activity,要求立即显示出页面图片;app打开页面默认会出现白板或黑板,这是因为没有设置android:windowBackground 窗口背景就是第一眼看到的颜色(白色或黑色);紧接着才会加载布局并展示出来。所以闪屏页一般没有layout布局文件,直接用style样式来完成:<!--闪屏页面布局--> <style name="SplashTheme" parent="Theme.AppCompat.NoAc

2021-03-03 14:33:51 444 1

原创 Android上传下载文件进度监听,大文件(500M以内)上传

1.普通文件的上传下载采用的是retrofit+rxjava的形式;1.1 依赖 implementation 'com.squareup.retrofit2:retrofit:2.4.0' implementation 'com.squareup.retrofit2:adapter-rxjava:2.4.0' implementation 'com.squareup.retrofit2:converter-gson:2.4.0' implementation 'i.

2020-09-23 15:03:00 1429

原创 Android自定义相机,带定位功能

1.公司项目要求,拍照时要显示自己的位置;排出的照片也要在照片上能看到位置;大致两种思路:自定义拍照页面后,点击拍照的时候,不拍照而是截屏;第二种是拍照后,把文字等等ui要求的东西通过bitmap代码以水印的方式加上去。截屏的话ui可以随意布局,都能得到想要的照片;但Android方面截屏参差不齐,有的还要root;我还没有细看,所以暂时用第二种方式实现。2.先看大概的样子这是打开相机和拍完照的样子。3.我这里使用的是camera1;对camera2来说,各个手机厂家支持情况..

2020-09-23 11:51:07 1814 2

原创 Android10及以下版本调用系统相机拍照并展示

一、拍照1.首先看build.gradle里的配置compileSdkVersion 29 buildToolsVersion "29.0.2" defaultConfig { applicationId "com.donkingliang.photograph" minSdkVersion 15 targetSdkVers...

2020-01-06 16:26:20 5933 3

原创 Android9上,调用系统相机拍照后,相册中不显示,第三方软件也读取不到

一、问题:我的app调用系统拍照功能,然后使用知乎的Matisse框架加载自己定义的文件夹中的图片,发现怎么也不显示。二、原因:Android给图片创建了一个数据库,我们需要手动去刷新这个数据库,把刚刚拍摄的照片信息放到数据库中,其它的软件才可以获取到图片。否则只有自己找到那个路径去拿图片了。三、先看实现:package com.ysl.photo;import android....

2019-11-22 12:39:41 2905

原创 Android productFlavors多环境配置

一般开发过程都会有开发环境和线上环境,而他们的服务器地址是不同的;每次打包都要去改里面的url地址很麻烦。下面说一下我自己的配置方法:defaultConfig {// applicationId rootProject.ext.android.applicationId //ysl 通过下面的多环境来配置,这里不需要写包名了 minSdkVersion r...

2019-11-13 10:50:44 1385

原创 Java之Queue

1.简介Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Deque接 口。2.常用类的关系图3.普通队列(1)内置的不阻塞队列:PriorityQueue和ConcurrentLinkedQueue  PriorityQueue 和 Concu...

2019-05-17 16:14:59 6499 1

原创 Android打包aar,并在另一个app使用

1.如何打包aar文件1.1先把自己的模块变成libraryapply plugin: 'com.android.library'注意清单文件中的修改;假如使用了butterknife注解;需要把R改为R2;1.2在Androidstudio右侧的gradle就会生成aar文件:2.在新工程中引用2.1放在新工程的lib目录下然后在app的build...

2019-04-22 09:38:22 2134 1

原创 Java的责任链模式

1.责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。2.结构图:执行流程图:参考:https://blog.csdn.net/u01281002...

2019-04-17 14:17:24 288

原创 Java的模板方法模式

1.模板方法模式(Template Method)定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模板方法可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。2.结构图3.一个简单的例子3.1定义一个抽象模板类life;里面定义了起床,去上班,工作,下班。public abstract class Life { private void getUp(){...

2019-04-16 10:34:06 3865 1

原创 Java的组合模式

1.组合模式就是一个对象中包含了其它的对象,组合多个对象形成了树形结构;其实就像我们电脑中的文件管理系统;文件夹中可以放入文件和子文件夹;子文件夹也可以再放文件和子文件夹;其实这样的设计模式在Android中的view和viewgroup也使用。2.结构图:3.我们就来据文件和文件夹的例子吧3.1定义一个文件接口,可以是抽象类或接口public interface File ...

2019-04-15 11:28:58 143

原创 Java的外观模式

1.外观模式(Facade),隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。2.结构3.下面来通过做饭这个例子;3.1这里简单定义做饭就是蒸大米和做鱼汤;首先定义两个类去实现这两个功能public class Rice { public...

2019-04-15 10:37:43 519

原创 Java的装饰模式

1.装饰器模式又名包装(Wrapper)模式。装饰器模式以对客户端透明的方式拓展对象的功能,是继承关系的一种替代方案。2.结构图3.再来看一个简单的例子3.1定义一个component接口public interface People { void method();}3.2定义一个具体的实现接口类public class XiaoMing implem...

2019-04-12 11:07:14 346

原创 Java的单例模式

1.Java的单例模式有7中写法,我们来一一介绍一下。2.懒汉式public class Singleton1 { private Singleton1() { } private static Singleton1 instance;//懒汉式 public static Singleton1 getInstance(){//存在线程安全问题,假如两个线...

2019-04-09 18:07:18 99

原创 Java的建造者模式

1.将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。2.建造者模式的组成部分 2.1 builder:为创建一个产品对象的各个部件指定抽象接口。  2.2ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。  2.3Direc...

2019-04-09 15:06:50 1518

原创 Java的适配器模式

1.将一个类的接口转成客户期望的另外一个接口。适配器模式使得原本由于接口不匹配而不能一起工作的那些类可以一起工作。适配器分为:类适配器、对象适配器、接口适配器2.类适配器:2.1定义一个otg充电接口public interface IOTG { void powerOTG();}2.2定义一个具体类实现这个功能public class OTG impleme...

2019-04-09 12:02:21 117

原创 Java的策略模式

1.策略模式的定义:定义一组算法,将每个算法都封装起来,使得它们之间可以相互替换。策略模式让算法独立于调用它的客户端而独立变化。2.结构图:3.Strategy是功能或算法的一个公共接口;并且context会持有引用。ConcreteStrategy是具体的策略实现类;实现了公共接口中的方法。Contex供客户端调用,持有公共接口的类;4.来看一个demo:4.1定...

2019-04-08 20:48:28 208

原创 Java的观察者模式

1.在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。2.先看一个例子2.1定义一个抽象的被观察者接口/*** * 抽象被观察者接口 * 声明了添加、删除、通知观察者方法 */public interface Observable { public void registerObserver(Observer o); ...

2019-04-08 17:34:56 142

原创 使用Hook技术屏蔽控件的点击事件

1.其实里面用的就是反射技术;先来看一个简单例子:public class HookActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstance...

2019-03-30 16:38:55 770

原创 Java线程池ThreadPoolExecutor的参数含义

1.先看构造方法public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit,...

2019-03-26 12:09:03 961

原创 高性能的MMKV

1.MMKV简介腾讯微信团队于2018年9月底宣布开源 MMKV ,这是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,主打高性能和稳定性。近期也已移植到 Android 平台,一并对外开源。MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。从 201...

2019-03-21 16:35:38 1516

原创 一个简单的mvvm架构例子

1.MVVM通过双向绑定的机制,实现数据和UI内容,只要想改其中一方,另一方都能够及时更新的一种设计理念,这样只需要改变数据就行。先看下MVVM设计图:一般情况下就这两种情况,这看起来跟MVP好像没啥差别,其实区别还是挺大的,在MVP中View和presenter要相互持有,方便调用对方,而在MVP中 View和ViewModel通过Binding进行关联,他们之前的关联处理通...

2019-03-21 09:41:29 3298

原创 Android之ViewStub的简单使用

1.viewstub就是动态加载试图;也就是在我们的app启动绘制页面的时候,他不会绘制到view树中;当在代码中执行inflate操作后,她才会被添加到试图中。其实ViewStub就是一个宽高都为0的一个View,它默认是不可见的,只有通过调用setVisibility函数或者Inflate函数才 会将其要装载的目标布局给加载出来,从而达到延迟加载的效果,这个要被加载的布局通过android:l...

2019-03-19 19:17:01 17043

原创 内存泄漏检测工具LeakCanary的简单使用

1.引入dependencies { debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.3' releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.3' // Optional,...

2019-03-18 17:36:12 708

原创 Android之IntentService

1.简单使用tv.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(HandleActivity.this, MyIntentService.c...

2019-03-12 14:36:57 117

原创 Android之HandlerThread

1.HandlerThread是一个Thread,是Google为提高开发者效率封装的一个类。与普通的Thread不同的是,它有一个成员属性 Looper,也就是说,我们的HandlerThread具有了Looper的功能。public class HandlerThread extends Thread {@Override public void run() { ...

2019-03-12 12:43:03 115

原创 Android之AsynTask

1.asynctask是Android为我们封装的一个异步线程调用的类;首先我们看一下它的简单使用public class HandleActivity extends AppCompatActivity { public static final int MSG_CODE = 0; public static final int MSG_CODE2 = 1; ...

2019-03-12 10:58:34 260

原创 Android的handler

1.Google官方建议开发人员使用Handler实现异步刷新UI,我们在平常的工作中也很好地采纳了这个提议:首先在主线程中建立Handler,然后在子线程中利用handler.sendMessage(message)发送消息至主线程,最终消息在handleMessage(Message msg) {}得到相应的处理。package com.ysl.myandroidbase.activit...

2018-12-03 15:35:33 144

原创 Android运行时权限

1.在Android6.0之前只需在AndroidManifest.xml文件写明权限即可。但是在Android6.0之后也就是SDK&gt;=23的时候,一些隐私权限需要动态申请,而且在用户同意授权之后App才能拥有该权限。如下9组权限需要动态申请。而且一组权限只要一个授权授权同意,全组都可用。  group:android.permission-group.CONTACTS    p...

2018-12-01 16:05:26 771

原创 Android底部导航BottomNavigationView

1.BottomNavigationVIew,它是AndroidSupport Library 25.0.0 版本中,新增加了一个API,底部导航视图。支持库:implementation 'com.android.support:design:28.0.0'2.看布局文件:<android.support.design.widget.BottomNavigationView...

2018-11-29 21:05:49 783

原创 Android之webview

参考:https://blog.csdn.net/qq_36252044/article/details/77993297https://blog.csdn.net/lowprofile_coding/article/details/77928614https://blog.csdn.net/carson_ho/article/details/64904691/   个人认为写的最好的一个...

2018-11-28 17:11:35 226

原创 Java静态变量static

static变量隶属于类,供类的多个不同对象来使用(既可以获取它的值,也可以修改它的值)。假如程序中有多个地方生成了多个不同的类对象,并且对该值进行修改的话,数据很容易出现错乱。package com.ysl.rxjava.SyncThread;public class SyncThread implements Runnable { private static int cou...

2018-11-27 16:35:00 737 1

原创 Synchronized

参考:https://blog.csdn.net/luoweifu/article/details/466130151.synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: (1) 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; (2)修饰一个方法,被修饰的方法称为同步方法,其作用的范围...

2018-11-27 16:05:31 3875

原创 Android之BroadcastReceiver

1.BroadcastReceiver属于Android的四大组件之一。分为:无序广播和有序广播无序广播是一种完全异步执行的广播,在广播发出之后,所有的广播接收器会在同一时间接收到这条广播,广播无法被截断。有序广播是一种同步执行的广播,在广播发出之后,优先级高的广播接收器可以优先接收到这条广播,并可以在优先级较低的广播接收器之前截断停止发送这条广播。2.注册方式:静态注册:只需...

2018-11-27 11:51:38 127

原创 Android之AIDL实现两个app的调用以及双进程app的进程通信

1.AIDL是一个缩写,全称是Android Interface Definition Language,也就是Android接口定义语言。是 Android 提供的一种进程间通信 (IPC) 机制。我们可以利用它定义客户端与服务使用进程间通信 (IPC) 进行相互通信时都认可的编程接口。在 Android 上,一个进程通常无法访问另一个进程的内存。 尽管如此,进程需要将其对象分解成操作系统...

2018-11-23 19:24:44 1117

原创 Android数据传输之Parcelable

1.Parcelable,定义了将数据写入Parcel,和从Parcel中读出的接口。一个实体(用类来表示),如果需要封装到消息中去,就必须实现这一接口,实现了这一接口,该实体就成为“可打包的”了。接口的源码如下:public interface Parcelable { //内容描述接口,基本不用管 public int describeContents(); ...

2018-11-23 11:49:31 555

原创 intentService和foregroundService的使用

1.intentserviceIntentService具有以下特点:(1) IntentService自带一个工作线程,当我们的Service需要做一些可能会阻塞主线程的工作的时候可以考虑使用IntentService。(2) 我们需要将要做的实际工作放入到IntentService的onHandleIntent回到方法中,当我们通过startService(intent)启动了Int...

2018-11-22 19:50:31 1511

原创 java中的sleep()、wait()、notify()的区别

1.调用wait()方法,线程会放弃对象锁,进入等待此对象的等待锁定池2.sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程, 但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。 在调用sleep()方法的过程中,线程不会释放对象锁。3.只有针对锁对象调用notify()方法后wait线程才进入对象锁定池准备获取对象锁进入运行状态。public cl...

2018-11-21 21:10:45 250

原创 Java四种线程池的停止

1.ScheduledExecutorService scheduleThreadPool = Executors.newScheduledThreadPool(6);创建一个定长线程池,支持定时及周期性任务执行。这种线程池支持延时任务和周期性任务,那就涉及到某个点不需要了,要取消任务。public class ThreadPool { private static Tim...

2018-11-21 19:35:22 7824

原创 Activity启动模式

1.四种启动模式:“standard” (默认)“singleTop”“singleTask”“singleInstance”注意:如果不设置启动模式,默认是“standard”,如果不指定affinity标记,默认是包名。2.“standard” (默认)Activity默认模式,所有的Activity遵循元素进栈出栈的特性,例如进栈序列为A->...

2018-11-21 15:58:50 347

空空如也

空空如也

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

TA关注的人

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