- 博客(254)
- 资源 (7)
- 收藏
- 关注

原创 C语言学习入门
编译文件:cc -c one.c two.c 生成.o目标文件链接文件:cc one.o two.o 默认生成 a.out 执行文件指定生成的可执行文件名 cc -o one one.o 连续编译、链接:cc one.c cc -o one one.c 中间生成的.o文件会被删除,最后生成执行文件cc one.c two.c
2014-10-13 17:27:01
16809
1
原创 利用Gradle发布项目到JCenter
前言最近想上传一个项目到 jcenter() 当中。踩了不少坑,在此记录一下。账号注册点击此处注册链接:点我注册如下图:点击 SIGN UP FOR AN OPEN SOURCE ACCOUNT 注册个人账号FirstName : 名 LastName: 姓 (这两个你可以随便输入,之后可以更改)UserName : 登录使用的用户名 (想好了再输入,不能更改哦!!!)Password : 密码Email Address : 邮箱地址 (建议你Google 邮箱) 。Select
2020-11-11 17:20:59
411
原创 Google Room框架简单使用
Google关于数据库,从最初的SQlite, 到后来的GreeDAO,用起来都不错。最最近项目中想尝试下Google的Room数据库,还可以跟RxJava结合,先把用法记录如下:参考文档https://developer.android.google.cn/jetpack/androidx/releases/room1. 项目中引入Room2. app build.gradle配置AP...
2019-09-18 17:51:23
1124
原创 Android 9.0 API 28 TabLayout
原来使用的修改TabLayout下划线的宽度的通用方法不好使了。api 28之前的修改下划线的代码如下:public void setIndicatorWidth(@NonNull final TabLayout tabLayout, final int margin) { tabLayout.post(new Runnable() { @Overrid...
2019-07-18 10:28:36
900
原创 Android ERR_CLEARTEXT_NOT_PERMITTED
Android 9.0打开html网页,出现这个错误然后去google文档中查找才发现Android9.0对未加密的流量不在信任,添加了新的限制。解决方案:
2019-07-05 11:25:52
563
原创 判断一个字符串是回文字符串
回文的定义:“回文数”就是正读倒读都一样的整数。判断一个字符串是否是回文字符串,算法如下: public static boolean isHuiWen(String text) { int length = text.length(); for (int i = 0; i < length / 2; i++) { if (tex...
2019-04-16 13:43:50
11616
原创 猴子偷桃问题
题目一个猴子来到山里的一棵桃树下,发现有一堆桃子。第一天它吃掉一个,然后拿走一半,回到家里,把消息告诉第二个猴子。第二天第二个猴子也来了,又吃掉一个,然后拿走了一半,回到家,告诉第三个猴子。第三个猴子也是吃掉一个,然后拿走了一半。以此类推,第10天,第10个猴子来到时,发现还剩下1个桃子。求第一天总共有多少个桃子?分析从最后一天往前推算,n1,n2,n3,n4,n5......n10表示第n...
2019-04-04 09:51:03
1915
原创 用两个栈实现一个队列
#思路入栈元素直接压入stack1出栈元素先查看stack2是否为空,非空则弹出;空则将stack1中元素取出,置于stack2中。代码如下:public class StackQueue { Stack<Integer> stack1 = new Stack<>(); Stack<Integer> stack2 = ne...
2019-04-02 16:31:19
185
原创 Java实现构建者(Builder)模式
Builder模式的定义是用于构建复杂对象的一种模式,所构建的对象往往需要多步初始化或赋值才能完成。那么,在实际的开发过程中,我们哪些地方适合用到Builder模式呢?其中使用Builder模式来替代多参数构造函数是一个比较好的实践法则。我们有时候会写这样的实现类:Student();Student(String name);Student(String name,int age);St...
2019-03-27 15:00:58
5454
原创 Detected problems with API compatibility(visit g.co/dev/appcompat for more info
项目中,用户在Android P 手机上报过来一个问题,如下:调研了一下,是 Android P 后谷歌限制了开发者调用非官方公开API 方法或接口,也就是说,你用反射直接调用源码就会有这样的提示弹窗出现,非 SDK 接口指的是 Android 系统内部使用、并未提供在 SDK 中的接口,开发者可能通过 Java 反射、JNI 等技术来调用这些接口。但是,这么做是很危险的:非 SDK 接口没有...
2018-12-17 10:23:08
5472
6
原创 Execution failed for task ':app:mergeDebugResources'.
今天在项目中碰到下面的编译错误,错误信息如下:org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:mergeDebugResources'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter....
2018-07-26 09:33:40
9506
原创 Android性能优化
随着应用增多,功能越来越复杂,布局也越来越丰富,而这些也成为阻碍一个应用流畅运行的阻碍。因此,对复杂的应用进行性能优化是创建高质量的应用程序的基础。Android UI 渲染机制人眼感觉的流畅画面,需要画面的帧数达到40帧每秒到60帧每秒,相信玩过PC游戏的朋友应该对帧数的概念非常清楚,最佳的fps大概在60fps左右,这也是评价一个显卡性能高低的标准之一。在Android中,系统通过VS...
2018-05-22 16:03:13
413
1
原创 滴滴插件化工具VirtualAPK源码解析之Activity
上篇文章已经介绍了VirtualAPK的配置和使用,请参考https://blog.youkuaiyun.com/shineflowers/article/details/80167302 今天看下从源码角度分析下VirtualAPK是怎么启动插件APK的吧!从上篇文章我们已经知道,启动插件APK的核心代码如下:// 加载Plugin.apk插件PluginManager pluginManage...
2018-05-04 15:43:33
677
原创 滴滴插件化工具VirtualAPK的使用
简介Android 插件化技术是比较热门领域,VirtualAPK 是滴滴2017年6月3号开源,框架功能完备,支持 Android 四大组件,良好的兼容性,且入侵性较低,作为加载耦合插件方案是较好选择。环境准备Gradle版本号为2.14.1,可以在gradle/wrapper/gradle-wrapper.properties中更改版本号: distributionUrl=h...
2018-05-02 15:35:04
2484
2
原创 ViewPager与Button、TextView左右滑动冲突的问题
最近在项目中碰到一个非常奇葩的问题,我的最外层是一个ViewPager,ViewPager中包含一个Fragment的集合,可以左右滑动,Fragment中的布局文件部分如下:<Button android:layout_width="match_parent" android:layout_height="match_parent" android:layo...
2018-03-08 09:51:41
791
原创 Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]
平台版本是Android 7.0,在adb install *.apk 会提示下面的错误: Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]方法1: 修改AndroidManifest.xml 中android:testOnly=”true” 改成 android:testOnly=”false”,或者直接去掉。方法2: ad...
2018-02-27 09:43:25
2473
原创 基于SwipeRefreshLayout的上拉加载控件
距离上一篇博客,居然已经过了大半年的时间,时间过得真快啊!优快云最近大改版,各种用户体验也是被无数人吐槽,让人提不起任何写博客的兴趣,不过,该写的博客还是必须得写,话不多话,直接进入正题。 现在项目中用列表来展示数据比比皆是,ListView和RecyclerView大家也是耳熟能详。实际项目中,后台肯定的接口肯定都是分页的,那么,分页加载也是自然而然的事,下面基于Google原生的下拉刷新控
2018-01-11 16:09:53
650
原创 Kotlin Reference (十四) Generics
most from reference泛型和Java一样,Kotlin中的类可能有类型参数:class Box<T>(t: T) { var value = t}一般来说,要创建一个类的实例,我们需要提供类型参数:var box: Box<Int> = Box<Int>(1)但是,如果可以推断参数,例如从构造函数或其他方式,可以省略一个参数:val box = Box(1) // 1 ha
2017-08-18 17:21:39
551
原创 Kotlin Reference (十三) Data Class and Sealed Classes
数据类我们经常创建一个类,只能持有数据。在这样一个类中,一些标准功能通常是从数据中机械推导出来的。在Kotlin中,这被称为数据类,标记为data:data class User(val name: String, val age: Int)编译器自动从主构造函数中声明的所有属性生成以下成员:equals() / hashCode()toString() 的形式 “User(name=Jacki
2017-08-11 11:34:01
538
原创 Kotlin Reference (十二) Extensions
most from referenceKotlin与C#和Gosu类似,提供了扩展一个新功能的类,而不必继承类或使用任何类型的设计模式,如Decorator(装饰者模式)。这是通过称为扩展的特殊声明完成的。Kotlin支持扩展功能和扩展属性。扩展功能要声明一个扩展函数,我们需要一个接收器类型(即被扩展的类型)作为其名称的前缀。以下是为MutableList扩展的swap功能:fun MutableL
2017-08-08 09:53:41
534
原创 Kotlin Reference (十一) Visibility Modifiers
most from reference类,对象,接口,构造函数,函数,属性及setters具有可见性修饰符(getter总是具有和属性一样的可见性)。在kotlin中油4个可视化修饰符:private,protected,internal,public。如果没有显式修饰符,则使用默认可见性public。包函数,属性和类,对象和接口可以在顶级上声明,即直接在包中:// file name: examp
2017-08-07 14:39:27
486
原创 Kotlin Reference (十) Interfaces
most from reference接口Kotlin中的接口非常类似于Java8,它们可以包含抽象方法的声明以及方法实现。与抽象类不同的是接口不能存储状态。它们可以具有属性,但这些需要是抽象的或提供访问器。 使用interface关键字定义接口interface MyInterface { fun bar() fun foo() { // optional body
2017-08-07 13:35:41
395
原创 Kotlin Reference (九) Properties and Fields
most from reference声明属性Koltin的类都有属性,这些属性可以声明为可变的,使用var关键字或用val关键字生声明不可变属性。class Address { var name: String = ... var street: String = ... var city: String = ... var state: String? = ...
2017-08-07 10:22:35
424
原创 Kotlin Reference (八) Classes and Objects
most from reference类Kotlin的类的声明使用关键字classclass Invoice {}类声明由类名、类头(指定其类型参数,构造函数等)和类体组成,由大括号括起来。如果一个类没有方法体,可以省略花括号。class Empty构造函数Kotlin中类可以有一个主要的构造函数和一个或多个辅助构造函数。主构造函数是类头的一部分:它在类名后面(可选的类型参数)class Pers
2017-08-04 14:20:45
425
原创 Kotlin Reference (七) Returns and Jumps
Returns and Jumpskotlin有三个结构跳跃表达式return 默认情况下,从最近的封闭函数或匿名函数返回。break 跳出整个循环continue 跳出本次循环,进行下一次循环所有这些表达式都可以用作更大表达式的一部分:val s = person.name ?: return这些表达式的类型是Nothing类型Break and Continuekotlin中的任何表达式
2017-08-03 14:05:19
423
原创 Kotlin Reference (六) Control Flow
if表达式在kotlin中,if是一个表达式,即它返回一个值。kotlin中没有Java中的三元运算符。// Traditional usage var max = a if (a < b) max = b// With else var max: Intif (a > b) { max = a} else { max = b}// As expression val
2017-08-02 16:58:39
435
原创 Kotlin Reference (五) Packages
most from reference包源文件可以从包声明开始:package foo.barfun baz() {}class Goo {}// ... 源文件的所有内容(如类和函数)都包含在声明的包中。 如果没有指定包,则这样的文件的内容属于没有名称的default包。默认导入默认情况下,将多个软件包导入到每个koitlin文件中: -kotlin。* -kotlin.annotatio
2017-08-02 14:05:08
529
1
原创 Kotlin Reference (四) Basic Types
most from reference基本类型在kotlin中,一切都是对象,我们可以在任何变量上调用成员函数和属性。一些类型可以具有特殊的内部表示:例如,数字、字符和布尔值都可以在运行时被表示为原始值,但是对于用户来说,它们看起来像普通类。在本节中,我们将描述kotlin中使用的基本类型:数字、字符、布尔值、数组和字符串。数字kotlin以接近Java的方式处理数字,但不完全相同。例如,数字没有
2017-08-02 10:07:59
532
原创 Kotlin Reference (三) Coding Conventions
most from reference命名规则1.使用驼峰式命名规则,尽量避免在命名中使用下划线2.类型以大写字母开头3.方法和属性以小写字母开头4.使用4个空格缩进5.public的方法加上注释说明,以便他们能出现在Kotlin Doc中冒号分隔子类和父类的冒号前面应该加上一个空格,分隔对象实体和类的冒号前面没有空格interface Foo : Bar { fun foo(a: Int
2017-07-31 10:51:42
498
原创 Kotlin Reference (二) Idioms
most from referencepackage com.jackie.basicimport java.io.Fileimport java.nio.file.Filesimport java.nio.file.Paths/** * Created by Jackie on 2017/7/28. * Idioms * A collection of random and f
2017-07-28 15:23:46
457
原创 Kotlin Reference (一) Basic Syntax
什么是Kotlinkotlin翻译成中文叫"靠他灵", 他是由JetBrains公司发明的一种基于JVM的编程语言,目前Google宣布kotlin为Android开发的官方语言。Kotlin的优势全面支持Lambda表达式数据类 (Data classes)函数字面量和内联函数(Function literals & inline functions)函数扩展 (Extension fu
2017-07-28 09:48:35
637
原创 Spark从零开始
Spark简介Spark是一个快速且通用的集群计算机平台。快速1.Spark扩充了流行的Mapreduce计算机模型2.Spark是基于内存的计算通用Spark的设计容纳了其他分布式系统拥有的功能批处理,迭代式计算,交互查询和流处理等。Spark是高度开放的Spark提供了Python,Java,Scala,SQL的API和丰富的内置库。Spark和其他的大数据工具整合得很好,包括hadoop,k
2017-04-11 14:16:58
2995
原创 Android NullPointerException FragmentHostCallback.getHandler()
在用到Fragment Adapter的时候,出现了下面的错误:java.lang.NullPointerException:Attempt to invoke virtual method 'android.os.Handler android.support.v4.app.FragmentHostCallback.getHandler()' on a null object reference
2017-03-20 15:00:10
7841
1
原创 Android GridView实现动画效果
项目中用到的一些动画,GridView的Item依次从屏幕外飞入到相应位置,附上相关代码:MainActivity.javapackage com.mundane.gridanimationdemo;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.Vie
2017-03-15 15:22:58
4658
原创 Java时间处理(...年前、...天前、...小时前)
这个功能还是挺实用的,比如我们发布了一条信息,以后再看这条信息,如要显示当前时间距离发布时间的时间间隔,备注一下: public static Date getDateByString(String time) { Date date = null; if(time == null) { return date; }
2017-03-15 09:47:30
2124
原创 Java 8 Lambda 表达式
Java是一流的面向对象语言,除了部分简单数据类型,Java中的一切都是对象,即使数组也是一种对象,每个类创建的实例也是对象。在Java中定义的函数方法不可能完全独立,也不能将方法作为参数或返回一个方法给实例。从Swing开始,我们总是通过匿名类给方法传递函数功能,一下是旧版的时间监听代码:someObject.addMouseListener(new MouseAdapter() {
2017-03-13 16:22:31
716
原创 Android App性能优化之内存优化
为什么要进行内存优化?1.App运行内存限制,OOM导致App崩溃2.App性能:流畅性、响应速度和用户体验Android的内存管理方式Android系统内存分配与回收方式● 一个App通常就是一个进程对应一个虚拟机可以通过下面的命令在终端来查看Android系统进程和内存分配adb shell:进入Android底层Linux系统命令ps: 查看系统进行的命令dumpsys meminfo
2017-03-09 10:45:27
1344
原创 Android自定义View实现垂直时间轴布局
时间轴时间轴,顾名思义就是将发生的事件按照时间顺序罗列起来,给用户带来一种更加直观的体验。京东和淘宝的物流顺序就是一个时间轴,想必大家都不陌生,如下图:分析实现这个最常用的一个方法就是用ListView,我这里用继承LinearLayout的方式来实现。首先定义了一些自定义属性:attrs.xml
2017-03-08 19:31:25
4075
原创 React Native基础与入门(二)--初识React Native
React Native组件React Native是用React Native框架来组建Android和IOS App的技术,那么React Native组件就是React组件。React组件让你将UI分割成独立的、可重用的一些碎片或部分,这些部分都是相互独立的。创建组件的三种方式1.ES6创建组件的方式export default class HelloComponent extends Co
2017-03-07 17:04:40
1710
原创 Freeline - Android平台上的秒级编译方案
FreeLine是什么?Freeline是蚂蚁金服旗下一站式理财平台蚂蚁聚宝团队15年10月在Android平台上的量身定做的一个基于动态替换的编译方案,5月阿里集团内部开源,稳定性方面:完善的基线对齐,进程级别异常隔离机制。性能方面:内部采用了类似Facebook的开源工具buck的多工程多任务并发思想:端口扫描,代码扫描,并发编译,并发dx,并发merge dex等策略,在多核机器上有明显加速
2017-03-06 19:56:49
1698
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人