自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

爱吃水果的程序猿

总结&笔记

  • 博客(46)
  • 资源 (4)
  • 收藏
  • 关注

原创 JNI定位c++错误

由于项目中有部分代码是通过c++实现的,在每次与底层对接都是非常痛苦的一件事。有时候是底层错误,有时候是JNI层的错误,一般来说JNI层出错后可以根据log看到崩溃的地方;而定位c++的错误可以通过NDK提供的三种工具定位:addr2line、objdump和ndk-stack,其中ndk-stack放在$NDK_HOME目录下,与ndk-build同级目录。addr2line和objdump在

2016-09-26 18:00:51 1740

原创 多线程操作数据库--WAL模式--一写多读并行

最近项目需求,要写入比较多的数据到db中,同时又不能让用户在写的过程中停止其他查询操作,也就是需要满足写读并发。通过一阵Google,发现了WAL模式。 下面介绍WAL模式的优缺点: 优点: 1. 读和写可以完全地并发执行,不会互相阻塞(但是写之间仍然不能并发)。 2. WAL在大多数情况下,拥有更好的性能(因为无需每次写入时都要写两个文件)。 3. 磁盘I/O行为更容易被预测。缺点

2016-05-29 13:15:18 2810

原创 Java并发编程--CountDownLatch配合线程池

Java并发编程–CountDownLatch配合线程池在处理一些耗时操作的时候,我们习惯上会把它放在子线程里面做,是的如果允许(我是指操作的内容),为了更快速地完成这堆操作,线程池是一个不错的选择。等等,好像有点不对,如果需要等待所有的线程在执行完后触发一个操作,这个时候你就需要用到CountDownLatch。其实这涉及到多线程异步转同步的问题,在java 1.5中,提供了一些非常有用的辅助类

2016-04-30 18:06:53 5410

原创 如何在多线程操作数据库--多线程串行

1前提很多时候我们都是在主线程下直接打开数据库并对数据库操作的,但如果遇到加密型的数据库,例如SQLCipher加密数据库,或者是对字段进行加密的数据库;你就不得不在线程里面操作数据库了!2解决大家都知道,在多线程操作数据库的时候,如果在各自线程中都利用之前的方法:实例化一个SQLiteOpenHelper类,然后在调用其中的方法。后面的就会遇到android.databa

2015-11-21 17:38:27 3839

原创 Android drawText的使用以及居中问题

Android drawText的使用以及居中问题一、BaseLine在Android中,画文字的位置和画图形的位置是有些不太一样的。 画图形是从图形的left和top的位置开始往右下方向画,这个不再详细说明。而画文字是从文字的左边和文字的baseline往右上方画,所以如果将文字画在0,0 的位置上, 那么你就只能看到文字底部的一点点了,其实就是baseline下面的一点点内...

2018-09-15 17:18:03 906

原创 Android上传Library到Jcenter-简易版

Android上传Library到Jcenter-简易版前言不废话,这里直接教大家如果在gradle中实现添加一句依赖”compile ‘com.xxx’”,便可让大家引用你写的lib项目。申请bintray账号简明扼要说一下,大家不要(向我一样,血与痛的教训)用https://bintray.com这个网址注册网址,而是个人免费版注册网址:https://bintray....

2018-08-07 23:29:39 250

原创 Android中的临时文件

Android中的临时文件前提对于临时内部文件,它们有两个选项1.File file; file = File.createTempFile(filename, null, this.getCacheDir()); 2.File file file = new File(this.getCacheDir(), filename);这两个选项都会在应用程序缓存目录...

2018-07-23 19:43:27 7537

原创 Google Play应用内付费知识点

Google Play应用内付费的一些术语应用与Google play进行IPC通信,负责购买请求和结果响应要完成应用内购买请求,Google Play 应用必须能够通过网络访问 Google Play 服务器使用 Google Play Developer Console 定义商品,包括商品类型、SKU、价格、说明,等等托管和未托管,托管是指谷歌负责记录商品的购买情况,并可查询,即使卸载/更换设...

2018-07-04 21:29:45 4259

原创 Java并发编程:线程池的使用

Java并发编程:线程池的使用目录大纲: * Java中的ThreadPoolExecutor类 * 深入剖析线程池实现原理 * 线程池状态 * 任务的执行 * 线程池中的线程初始化 * 任务缓存队列及排队策略 * 任务拒绝策略 * 线程池的关闭 * 线程池容量的动态调整 * 自...

2018-05-27 22:55:41 328

原创 Android ShortCut快捷方式的创建/删除和判断

ShortCut 快捷方式的创建和判断一、相关介绍1. 快捷方式的创建、删除通过广播实现2. 也就是要传一个intent3. 接受intent的这个广播接收器负责把intent传的数据写入到launcher的favorite表4. 系统是根据favorite生成桌面的快捷方式的5. 抽屉,这个基本只有在原生的系统有的一个控件,里面罗列所有安装的appIcon本来呢,如果是...

2018-05-24 20:18:31 4443

原创 Android ConstraintLayout 属性简易介绍

Android ConstraintLayout 属性简易介绍一、位置属性app:layout_constraintLeft_toLeftOfapp:layout_constraintLeft_toRightOfapp:layout_constraintRight_toLeftOfapp:layout_constraintRight_toLeftOfapp:layout_co...

2018-04-26 10:54:19 572

原创 Android NDK编译本地文件以及引用第三方so文件

使用android studion自带的编译工具NDK进行编译时,发现armeabi以及x86文件夹下的第三方so文件将会被删除,只会产生编译后的so文件,其他的so文件。下面说说解决办法:在jni下建一个文件夹,为第三方库,写一个.mk文件,以我的为例: 文件Android_3part.mkLOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOC

2017-02-20 10:33:01 908

原创 gradle中用到的命令行

android 官网对gradle 语法的实例: https://developer.android.com/studio/build/dependencies.html以下的app为你的项目名称,yourTask为某个具体的task名(如assembleRelease)查看权限 ls -l查看所有文件(包含隐藏文件) ls -a添加执行权限 chmod 777 gradlew需要查

2017-02-15 10:50:19 791

原创 android-ndk环境配置

Mac中的Android SDK配置环境变量: 启动Mac自带的终端Terminal。 进入当前用户的home目录。 在命令行输入echo $HOME 创建.bash_profile文件。 命令行输入touch .bash_profile 打开.bash_profile文件。 命令行输入open -e .bash_profile 此命令行输入完毕后,会自动弹出 .bash_profil

2017-01-20 11:45:10 3367

原创 赛马-25匹马选出前三名问题

题目: 25匹马,速度都不同,但每匹马的速度都是定值。现在只有5条赛道,无法计时,即每赛一场最多只能知道5匹马的相对快慢。问最少赛几场可以找出25匹马中速度最快的前3名?答案:25匹马分成5组,先进行5场比赛 再将刚才5场的冠军进行第6场比赛,得到第一名。按照第6场比赛的名词把前面5场比赛所在的组命名为 A、B、C、D、E 组,即 A 组的冠军是第6场第一名,B 组的冠军是第二名 … 分析第2

2016-10-18 14:46:21 2769

原创 Android系统6.0获取WiFi列表为空的问题

最近做的一个功能中涉及到了网络定位,当前采取的方案是利用谷歌提供的Google Maps Geolocation API实现,其中需要我们提供用户当前的基站列表+wifi列表。然后问题就来了,最后发现在6.0的手机上–不开启GPS的时候wifi列表为空。尼玛,吓得我立马打开demo查看代码:public WifiManager mWifiManager;//描述任何Wifi连接状态private

2016-10-16 18:12:23 9154 1

原创 Java访问权限控制修饰符比较

1、java访问权限修饰符(特殊情况除外) 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 不写时默认为friendly2、C++中和JAVA中,public、private、p

2016-10-09 10:40:16 849

转载 Java异常处理和设计

Java异常处理和设计Java异常处理和设计  在程序设计中,进行异常处理是非常关键和重要的一部分。一个程序的异常处理框架的好坏直接影响到整个项目的代码质量以及后期维护成本和难度。试想一下,如果一个项目从头到尾没有考虑过异常处理,当程序出错从哪里寻找出错的根源?但是如果一个项目异常处理设计地过多,又会严重影响到代码质量以及程序的性能。因此,如何高效简洁地设计异常处理是一

2016-10-09 10:08:05 299

原创 JNI中map转HashMap

JNI中map转HashMap

2016-09-23 18:16:15 6584

原创 C++ map的基本操作

Map是c++的一个标准容器(STL),提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本操作!map最基本的构造函数;

2016-09-23 17:23:51 440

转载 C++ function、bind以及lamda表达式

本文是C++0x系列的第四篇,主要是内容是C++0x中新增的lambda表达式, function对象和bind机制。之所以把这三块放在一起讲,是因为这三块之间有着非常密切的关系,通过对比学习,加深对这部分内容的理解。在开始之间,首先要讲一个概念,closure(闭包),这个概念是理解lambda的基础。下面我们来看看wikipedia上对于计算机领域的closure的定义:

2016-02-23 14:25:46 329

原创 百度语音sdk授权问题

当前测试百度语音合成sdk版本为v2.2.1.20160122,授权方式包括以下:通过自带的temp_license文件授权,主要用于测试,在实际项目中是用不上的;在线授权;通过一个晚上的摸索,百度的这个语音合成比较奇怪,在线与离线授权是分开两套方案的。在线授权只需要setApiKey(apiKey,secretKey)即可;离线授权;离线需要使用到包名,同时需要setAppId(appId

2016-02-22 15:20:47 5006

原创 解决 The same input jar is specified twice 问题

最近在做一个新项目,用到了百度的语言合成sdk,由于是免费的,当然作为首选。在使用过程中,确确实实的感觉的这个毕竟是免费的!如无意外,会写多一篇关于百度语言合成sdk的博客,作为今后的学习记录也好。下面进入正题说说这个错误:The same input jar is specified twice开始看到还以为是上述依赖的地方重复写两次一样的jar包,不过很快就被自己否定了,两个重复的jar包,

2016-02-22 14:53:53 4948

原创 百度地图使用注意事项

百度地图使用注意事项申请key运行到android studio百度地图使用注意事项申请key下载simple demo 解压获取包名;目前android studio是获取不了SHA1值的,建议从eclipse上获取,直接拷贝就好运行到android studio导入as,如果demo的buildToolsVersion与本地不一致选择下载或者改成本地有的;修改module下的sig

2015-12-05 14:03:06 617

原创 解决APP启动缓慢以及黑屏问题

启动过慢在app启动的时候,如果发现应用启动过慢,有可能是下面的情况引起的:1、依赖了过多的lib2、app引用的资源导致加载时间过长3、在启动页面的onCreate和onResume执行了耗时比较长的事务启动过慢-->导致黑屏闪黑屏的原因主要是我们启动Activity的时候,需要跑完onCreate和onResume才会显示界面,但我们可以通过一下两个办法解决这个问题

2015-11-18 18:15:04 4941 3

原创 dispatchTouchEvent以及onTouchEvent事件分发

为了理清思路,先省去了对onInterceptTouchEvent的分析,看看只有dispatchTouchEvent以及onTouchEvent存在的情况下,点击事件的分发。注意:下列情况都的点击区域的是子控件情况1:当父控件的dispatchTouchEvent返回super.dispatchTouchEvent(ev)的时候,执行分发操作,父控件、子控件的dispatchTo

2015-11-12 17:07:22 725

原创 SQLiteException: Can't upgrade read-only database

报错内容:SQLiteException: Can't upgrade read-only database from version xx to yy:/data/data/com.xxx/databases/xxx.db at xxx.xxx.database.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:197)

2015-11-12 11:03:55 1809

原创 自定义Android软键盘enter事件

一般情况下我们的输入框都需要一些这样的需求:1、EditText上输入以后,回车---》隐藏软键盘;2、回车---》发送EditText上的消息;3、回车---》,后光标到下一个光标;幸运的是EditText给我们预留了一个回调接口:setOnEditorActionListenerEditText.setOnEditorActionListener(new OnEdito

2015-11-03 17:27:39 1150

转载 译文:Android中糟糕的AsyncTask之停止AsyncTask操作

译文:Android中糟糕的AsyncTaskNOV 8TH, 2014AsyncTask是一个很常用的API,尤其异步处理数据并将数据应用到视图的操作场合。其实AsyncTask并不是那么好,甚至有些糟糕。本文我会讲AsyncTask会引起哪些问题,如何修复这些问题,并且关于AsyncTask的一些替代方案。AsyncTask从Android API 3(1.

2015-10-30 18:44:32 3787

转载 Android M新的运行时权限开发者需要知道的一切

android M 的名字官方刚发布不久,最终正式版即将来临!android在不断发展,最近的更新 M 非常不同,一些主要的变化例如运行时权限将有颠覆性影响。惊讶的是android社区鲜有谈论这事儿,尽管这事很重要或许在不远的将来会引发很严重的问题。这是今天我写这篇博客的原因。这里有一切关于android运行时权限你需要知道的,包括如何在代码中实现。现在亡羊补牢还不晚。新运

2015-10-30 11:32:55 407

转载 Android6.0 新特性详解

本文描述了Android6.0在运行时权限、存储、电源管理方面的改进,译自官方文档。目录:一 运行时权限受影响的权限请求权限迁移二 存储:权限运行时权限三 电源管理AppStandby生命周期Doze生命周期集成Doze豁免应用参考链接一 运行时权限Android6.0 引入了一个新的应

2015-10-30 10:56:22 1301

原创 android开发Fragment not attached to Activity异常解决

在利用Fragment做开发的时候,偶尔或者是少数情况下报错:Fragment XXFragment not attached to Activity,这有可能是因为Fragment在还没有Attach到Activity时,调用了如getResource()等,需要上下文Content的代码。因此在使用到上下文资源的地方加上:if(isAdded()){ getResource

2015-10-29 16:35:29 6652 1

原创 android广播的两种注册方式以及区别

一、BroadCastReceiver两种注册方式:动态注册和静态注册动态注册,即在代码中注册,如下:receiver2 = new Receiver2(); registerReceiver(receiver2, new IntentFilter( "com.niqiu.action.CLEARNOTIFICATION"));当然也可以通过InterFilter的

2015-10-28 10:42:25 1494

转载 Eclipse代码托管到GitHub

如果平时自己一时兴起写了一个小Demo,希望分享给大家,那么GitHub自然是我们代码托管的首选。Google本身推出的捆绑的Eclipse本身已经将Git打包在里面,对于我们提交Android代码来说已经减少了一个步骤,下面就来具体的看看怎么将代码直接变成git工程,然后托管到GitHub:1.首先确认Eclipse版本如果不是从Google下载的版本,则需要去http://downlo

2015-10-27 23:48:42 874

原创 WIFI项目--Android Studio的.gitignore以及使用git提交拉取代码

由于是第一次用as的git功能,真是吃了个小亏,都怪当初上传到csdn的时候没拉取测试,后来回到公司后捣鼓了好久还是不行。下面说一下正确的流程:拿csdn的git托管为例子,先是创建仓库,然后电脑拉取第一个版本,把项目拷贝到该文件夹里;在project视图下,选中顶级项目,右键add,将所有的文件都加入; 如果是最新版的android studio (我用的是1.4标准版),会自动生成.giti

2015-10-26 19:04:05 1240

原创 WIFI项目--java.net.SocketException四大异常解决方案

今天在利用socket传输文件的时候,报java.net.SocketException下面的第四、第五种异常,传输小文件没问题,但是大文件就挂了。下面给大家普及一下基础知识:java.net.SocketException在我们使用的时候会出现很多异常,这些会影响到我们的学习和使用。下面我们就仔细的研究一下。java.net.SocketException如何才能更好的使用呢?这个就需要我们先要

2015-10-25 11:32:12 2075

转载 WIFI项目--【Java TCP/IP Socket】 — 单播、广播、组播

在当前网络通信中(TCP/IP也不例外)有三种通信模式:单播、广播、组播(又叫多播, 个人感觉叫多播描述的有点不恰当),其中多播出现的时间最晚,但同时具备单播和广播的优点,最具有发展前景。 通信方式分类: 1.单播:单台主机与单台主机之间的通信; 2.广播:单台主机与网络中所有主机的通信; 3.组播:单台主机与选定的一组主机的通信;单播: 单播是网络通信中

2015-10-24 20:53:52 2626

原创 WIFI项目--Android 获取本机IP(wifi下),子网掩码,网关,dns等信息

近期在捣鼓一个小项目,利用wifi热点在两手机上传输文件。进度有点慢,下面是遇到的一些小问题: 1获取手机所连接的wifi路由器ip:ublic class MainActivity extends Activity { private WifiManager my_wifiManager; private WifiInfo wifiInfo; private D

2015-10-24 20:41:00 2451

原创 Gson解析之自定义序列化和反序列化

最近在解析Gson过程正经常遇到这样的问题: 在后端给的接口文档中,对于给定的字段A其数据类型是X,但是在实际情况下,后端有可能返回的字段A是数据类型Y,这个时候就hehe了,gson抛异常,如果不捕获程序就直接奔溃了;捕获之后这条数据也会因为这个字段的解析失败而最终作废。对于这样的问题,android自带的json解析类,是可以避免的,直接把该类型作为X。但是android自带的解析类在写起来比

2015-10-19 18:12:41 5889

原创 android studio -- 图片应该放在drawable还是mipmap?

最近使用android studio做一些简单的开发,最后需要放置图片的时候看一下历来的目录,还是有写迷惑,果断google了一下。在Eclipse中根据图片的像素大小把,png或.jpg的图片放在drawable文件夹下,如drawable-hdpi,drawable-ldpi,drawable-mdpi,drawable-xhdpi,drawable-xxhdpi.同一张图片放在不同的drawa

2015-10-15 11:06:04 3663

MulThreadSQLiteTest多线程操作数据库

多线程操作数据库,可解决已加密或者比较复杂的数据库查询时间比较长的问题

2015-11-21

android广播的两种注册方式以及区别

用两个工程展示了,广播的两种注册方式以及区别。其中一个工程负责用两种方式注册广播,另一个工程则发起广播,注意在应用还没启动前,无论是以哪种形式注册的广播,都是接受不到的

2015-10-28

Gson解析之自定义序列化和反序列化

Gson解析之自定义序列化和反序列化的代码例子,但后端对同一个字段给的数据类型与文档不一致时的处理

2015-10-20

c语言计算器(含代码)

   完成一个简单的计算器,要求实现最基本的运算操作,当用户输入一个算式后,计算器显示计算结果,同时屏幕项部显示:continue? 如果用户此时按Y键,则继续输入下一个算式,否则,程序终止。 实现要求: 由主函数获取用户输入的算式并进行分解,确定操作数和操作符 完成基本运算(+-×÷%)函数 完成复杂运算(sin,cos,tag)函数

2013-10-17

空空如也

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

TA关注的人

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