自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Okloong的博客

从最小反馈体开始。

原创 博客导航

博客导航——本博客文章的不完全收录。

2019-09-01 17:20:38 403

原创 Timber

Timber初始化设置。 Timber.plant(new Timber.DebugTree()); Timber.plant(new Timber.DebugTree() { @Override protected void log(int priority, String tag, @NotNull String...

2019-12-26 15:49:20 29

原创 adb

文章目录apkpush和pullserver查询设备号Wifi连接模拟点击模拟按键日记pmdumpsysAM启动系统刷机apkadb devices #查看连接的设备# 安装apkadb install apkname #安装apkadb install -r-l 锁定该应用程序-r 替换已存在的应用程序,也就是说强制安装-t 允许测试包-s 把应用程序安装到sd卡上-d 允许...

2019-12-24 14:22:50 51

原创 Fragment用法

首先你需要一个布局 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/fragment_container" android:layout_width="match_parent" android:layout_he...

2019-09-05 21:57:00 194

原创 Thread生命周期

Java中线程的状态分为6种。- NEW:初始状态,线程被构建,还未调用start()方法;- RUNNABLE:运行状态,在java多线程模型中,就绪和运行都是运行状态;- BLOCKED:阻塞状态,线程阻塞于锁;- WAITING:等待状态,需要等待其他线程做出一些特定动作(通知或中断)。比如中断,需要其他的线程来唤醒;- TIME_WAITING:超时等待,可以在指定的时间内自行返回;- TERMINATED:终止状态,线程执行完毕。

2019-09-02 21:52:45 125

原创 Android屏幕相关设置

方案一:AndroidManifest.xml中配置里面设置设置activity的android:screenOrientation属性。“unspecified”:默认值 由系统来判断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向.“landscape”:横屏显示(宽比高要长)“portrait”:竖屏显示(高比宽要长)“user”:用户当前首选的方向“behi...

2019-09-02 11:10:07 320

原创 NDK基础知识

在NDK里面c调用java的方法类似于反射。需要先获取到对应的方法名称,虚拟机等。这个回去相关的信息的c代码。#include <jni.h>extern "C" {// Data callback stuffJavaVM* theJvm;jobject dataCallbackObj;jmethodID midDataCallback;/** * Initi...

2019-09-01 21:11:48 105

原创 NDK动态注册

c/c++和java交互,需要找到双方各自对应的函数或方法来调用。这种产生联系的方式有两种方式,一个是静态注册,另一种事动态注册。动态注册是比静态注册的好处是不需要JNI那一套很长的命名。其他的规则和静态注册无异,只是注册的地方不同而已。下面是动态注册的方式。/** * 动态注册 */extern "C" {jstring stringFromJNI2(JNIEnv *env, j...

2019-09-01 17:42:57 71

原创 NDK调用非JNI标准的so文件

调用so文件有两种方式,一种是标准的jni文件,另外一种不是jni标准。jni标准可以直接用jni标准来调用,非jni标准的需要外面包裹一层jni标准才能调用。下面就演示怎么用。NKD可以用ndk-build来编译,也可以用cmake来编译。这里用的是cmake。CMakeList.txt内容。# For more information about using CMake with And...

2019-09-01 17:11:17 257

原创 APK打包流程

本文将讲述Android APK的结构和打包流程。

2019-04-28 21:58:41 2571

原创 WindowManager的一些属性

WindowManager(窗口管理服务),它是显示View的最底层,Toast,Activity,Dialog的底层都有用到了这个WindowManager。WindowManager里面主要是addView,removeView,updateViewLayout这几个方法来显示View,以及通过WindowManager.LayoutParams这个API来设置相关的属性。文章将详细介绍。

2019-04-28 13:48:34 384

原创 IntentService中的耗时操作

由于Service和Broadcast都是运行在主线程中,所以在这两个里面我们无法做一些长时间的耗时操作,要执行耗时操作可以用异步线程AsyncTask或者IntentServie。IntentServie的好处是调用玩后会自己关闭service。

2019-03-31 18:56:40 411

原创 Android消息队列机制

文章将带你理解 Looper、Handler、Message三者的关系。

2019-03-21 21:42:26 78

原创 反馈式学习

本篇文章将讲述我自己的学习方法——反馈式学习。每个人对学习方法都有不同的理解,可能某人对某种学习方式有较深刻的感触,而别人却不感兴趣。但如果你深究到底,你可能发现它们的核心基本是一样的。这篇文章里面的学习方式其实并不重要,主要是你能根据这背后的原理整合一套适合自己的学习方法。一、反馈式学习反馈式学习是以反馈当作一种学习的学习方式。你首先搭建好一个有信息反馈的环境,然后在里面探索,在探索...

2019-03-13 22:21:34 5400 2

原创 单例模式

饿汉模式初始化时就实例化,线程安全。懒汉模式使用时候才实例化。双重判空,第一次判空防止重复加锁,第二次判空才实例化。

2019-02-25 22:50:32 42

原创 Java反射

将介绍Class对象获取以及其内部一些方法属性介绍。

2019-02-18 22:56:51 76 1

原创 synchronized

一个对象对应一把锁,要线程同步需要两者同步为同一对象。在该问题中,synchronized修饰pubulic方法中没有具体的参数默认的锁为this,即是当前实例对象。在创建过程中创建的是两个不同对象,对应两把不同的锁。由于调用时由于用的不是同一个锁,所以不能线程同步。synchronized修饰的静态方法,能构成线程同步。静态方法加的锁为类对象的锁。由于静态方法具有全局唯一性,调用的时候调用的是...

2019-02-17 23:49:25 68

原创 Java动态代理

动态代理其实是面向切面编程AOP。实现有两种,一个是Java SDK提供的,另外一个是第三方库提供,比如cglib下面是Java SDK提供的代理静态代理package aop;public class SimpleStaticProxyDemo { static interface IService { public void sayHello(); } static c...

2019-02-11 23:16:06 62

原创 Rxjava2源码分析(2)——操作符

承接上一篇Rxjava2源码分析(1) 这一篇将讲下Rxjava2的操作符。在Rxjava里面最常用的是map操作符,接下来将从map入手分析。1.map操作符的基本用法这里按照国际惯例,先上map的基本用法。Observable.create(new ObservableOnSubscribe<Integer>() { @Override ...

2018-05-18 07:40:41 169

原创 Rxjava2源码分析(1)

1、基本用法本文解读是rxjava的2.1.0版本,对应的rxandroid版本为2.0.1。 先看看基本用法 Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(@NonNull Observable...

2018-05-16 07:59:01 360 1

原创 Android Studio 关联Android源码

在Android studio里面跳转Android源码时,有些Android源码会隐藏了以桩代码出现,可以用下面的方法来处理。 1.替换Android.jar包 从https://github.com/anggrayudi/android-hidden-api下载对应的Android.jar包,替换/platforms/下的对应的jar包,比如android-26/android.jar。然...

2018-05-11 09:09:19 282

原创 Hexo博客搭建

Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown解析文章,生成的静态网页布置在GitHub上面,作为个人博客使用十分方便。本文前面部分将讲Windows10环境来搭建hexo博客,并介绍hexo博客的相关设置以及优化,后面会有linux环境下的相关配置。 一、Windows环境 部分linux命令请在git base里面执行。1.1 环境搭建...

2017-09-26 23:43:53 838

原创 git的ssh配置和使用

一、秘钥生成我是在Windows的gitbase里面操作的。 生成秘钥: $ ssh-keygen -t rsa -f sample t 为密码类型 f 为生成的秘钥文件名称 回车键后会让你输入密码,你可以不输,直接按回车到下一步。 ssh-keygen -t rsa -C “your_email@youremail.com” 有些为了方便识别,会以自己的邮箱做标记。 这个是命令输入

2017-09-13 23:56:14 657

原创 Android状态栏花样设置

一、沉浸栏说到沉浸栏,这个沉浸栏效果在很多游戏或者视频软件应用会用到。平时状态栏和导航栏都隐藏了,点屏幕中间部分不会出现,但是从屏幕上方滑动,或者右侧滑动的话,就会出现状态栏和导航栏,而且过一段时间后,状态栏也会缩回去。效果如下所示。 其实它的实现说起来也很简单,重写一下Activity的onWindowFocusChanged()方法。 由于在19版本后才有沉浸栏,所以要判断一下。 @Over

2017-09-12 22:11:12 375

原创 RecyclerView拖拽、侧删实现

废话不多说,下面展示一下效果。这是GridView主文件实现。public class GridViewActivity extends AppCompatActivity { RecyclerView mRecyclerView; List<String> mStringList; RecyclerAdapter mRecyAdapter; @Override

2017-09-11 11:48:21 196

原创 Android设计模式之装饰者模式(Decorator Pattern)

概论在Android源码里很多时候会看到这个模式。下面来讲一些这个模式。 装饰者模式主要的优点是动态给一个对象添加一些额外的职责。使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活。缺点是,要创建比继承更多的对象。 先来个热身,下面是装饰者模式的uml图。它大概就长得这样子的。 1. Component抽象组件,是一个接口或者是抽象类,就是定义我们最核心的对

2017-09-07 14:34:39 401

原创 自定义Android 注解

Android里面的注解一般有两种,一种运行时注解,另外一种是编译时注解。运行时注解是基于反射原理的,编译时注解这个就多点,常见的是基于apt的代码生成。反射,会在运行时候在对应的位置插入对应的操作;而编译时注解会在编译时候生成对应的代码进行编译。对于运行性能来说,反射更耗性能。本章将说下Android的注解。 概述从下面这张图可以看到Java注解的结构分支。 Java注解(Ann...

2017-09-07 09:48:01 235

原创 android stuido关于在V7包和recyclerview包冲突的解决办法

问题叙述在Android下引用 compile 'com.android.support:recyclerview-v7:26.+' compile 'com.android.support:appcompat-v7:25.3.1'这两个包冲突。 错误信息如下Error:Execution failed for task ':example:processDebugManifest'

2017-09-06 16:10:37 713

原创 自定义一个ListView的下拉刷新

下拉刷新是常见的Android效果之一,下面我们来看看它是这么实现的。下拉刷新会在头部出现一个头部,然后我们控制这个头部显示,隐藏,来实现下拉刷新的效果。在listview里面的item是从0开始数的,这个头部item就是在第0个item前面一个,我们现在要做的是控制这个头部的绘画和动作事件。

2017-06-22 11:12:38 312

原创 clojure学习(1)——判断语句

clojure是操作符前缀的语言。;为单行注释nil相当于Java里面的null,if判断里面的falseif语句除了false和nil,其他都为true,如果else后面没内容,为false时就返回nil。user=> (defn is-small [number] (if (< number 100) "yes" "no"))#'user/is-smalluser=> (is-small 2

2017-04-16 20:47:02 706

原创 clojure初探

本文目的是用clojure输出“Hello world!”本文用的是window系统,并认定你已经安装java环境。首先下载clojure,下载地址:https://clojure.org/解压到自己定的目录里面,然后在cmd里面cd进clojure文件夹。输入: java -cp ./clojure-1.8.0.jar clojure.main我的版本是1.8,你根据自己的版本来更改版本号。然后会

2017-04-14 17:15:29 408

原创 Android动画之——圆形进度条加波浪线

效果图 圆形进度条public class RecordView extends View { //View默认最小宽度 private static final int DEFAULT_MIN_WIDTH = 500; public final static int MODEL_PLAY = 2; public final static int MODEL_REC

2017-04-14 10:29:58 3267

原创 EventBus的使用

EventBus主要用于各个组件之间的通信,EventBus作为事件总线方便项目解耦。EventBus整个框架采用订阅者模式来操作。这里我用两个activity进行通信这个是第一个activitypublic class MainActivity extends AppCompatActivity { @BindView(R.id.tv_m) TextView title;

2017-04-13 20:36:25 472

原创 Butter Knife的使用

Butter Knife是view注入框架,使用Butter Knife主要是为了减少代码量,把让模板代码自动生成。先在module的build.gradle里面的dependencies添加依赖compile 'org.greenrobot:greendao:3.2.0'compile'org.greenrobot:greendao-generator:3.2.0'一般用的比较多的是点击事件绑定

2017-04-13 20:33:46 342

原创 ubuntu adb找不到设备

问题:在ubuntu上连上手机,adb 相关操作时,看到是显示无设备。手机上已经设置了USB调试,但pc端显示不了。 输入adb devices显示no permission,或者是无设备显示。adb devices List of devices attached ???????????? no permission这基本上权限问题。 在谷歌官网上给出以下操作:$ wget -S -

2017-01-18 14:32:31 1368

原创 Django之Helloworld

本文所用的环境是ubuntu14.04,Python2.7和Django1.8.16一、安装环境先安装pipsudo apt-get install python-pip安装Djangosudo pip install Django==1.8.16环境检查 先在命令行里输入Python,系统会反馈Python版本信息,然后在Python的命令行里输入:>>> import django>>> d

2017-01-18 00:21:27 455

原创 用Android Studio读Android源码

之前在ubuntu中下载了Android源码,但当时只限于编译系统。现在想想如果能顺便研究一下源码岂不美哉,说做就做。开发Android APP用的是Android studio,用它来看Android源码其实也很方便的,所以我也在ubuntu上选择Android studio这样的IDE来看源码。下面将讲述搭建环境用Android studio看源码。一、编译idegen模块 idegen一看名

2017-01-17 22:06:54 499

原创 ubuntu安装ftp和tftp

为了局域网方便访问ubuntu系统,在ubuntu14.04上安装了tfp和tftp服务。在windows端用FileZilla、FlashFXP、xFTP、CuteFTP等等访问都很方便。本文将介绍FTP和tftp服务器的搭建。

2017-01-17 16:50:09 370

原创 Android系统源码编译

安卓源码编译需要linux环境,我这里用的是ubuntu14.04,虽然ubuntu16.04出来很久了。但是16.04有些依赖没解决得了,所以用14.04版本方便很多。下面将用ubuntu14.04环境为大家讲述源码的下载、编译和刷机。

2017-01-11 09:30:08 5340 1

原创 Android 6.0动态权限申请

从安卓6.0开始,有部分危险权限申请需要在运行时候申请,一般是你的目标版本targetSdkVersion大于或等于23就要动态申请权限了,否则APP在运行当中会崩溃。

2016-12-29 18:38:30 2426 1

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