Android Wear开发浅析 置顶! 有更新!

2017-09-05
0 评论 1,565 浏览

Android Wear究竟是什么? Android Wear和手机是完全不同的设计理念:手机大多数情况下,都是用户去操作,去触发里面的应用;而手表则是“用户被动”的,用户越少感觉到你的存在,越是合理,而在某些场景下给予最合适的提醒,则是Android Wear最伟大的设计理念,这也是它想做到的。 Android Wear是智能的通知栏!(个人理解) 在早上醒来的时候,给你推送早上的天气、交通状况。在你到达餐馆的时候,给你推送大众点评,美团购物券,为你精打细算。检测到你的运动状态,显示计步器,心率状况(Android Wear本身内置)。 Android Wear开发阶段 产品需求方向的确定 很重要的是,产品要设计成什么样子? 手机到手表的信息通知栏样式优化 : 例如设置背景 手机与手表的智能推送:例如通过手表来寻找手机,或是将手机拍到的照片发送给手表 自定义卡片样式:保持卡片样式的基础上,对卡片内的布局进行调整,添加动画,点击等交互 完全自定义界面,提供独特的交互:可抛弃卡片样式,使用WearAPI提供的新组件 手表表盘:各种样式,各种高大上 技术实现 ....

Mac下使用Nexus搭建本地代码仓库并上传lib到仓库 有更新!

2019-02-27

安装nexus: 可以通过brew 来安装: 在Mac终端输入 brew install nexus(如果提示没有brew命令,先安装brew) 启动nexus 终端命令: brew services start nexus 现在我们输入地址http://127.0.0.1:8081/nexus  端口默认是8081 用户名密码默认是:admin/admin123   发布本地Android studio 项目到本地仓库: 在library module中应用maven插件:  ``` apply plugin: ‘maven’ 定义库的group和version version ‘1.0.0-SNAPSHOT’ group ‘com.baidu.juping’ 定义uploadArchives task (顺便定义目标maven仓库的地址), 如下:       uploadArchives {    repositories {     ....

gradle多模块依赖打包 有更新!

2019-02-27

多模块依赖打包,在根目录的build.gradle中自定义task(比如说运行 gradle buildHostTv:会先运行plugin的assembleTv任务,把构建的apk复制到host的存储目录,再进行host的构建产出脚本assembleTv)

阿里云CentOs搭建RocketMQ环境 有更新!

2018-04-04
0 评论 1,303 浏览

环境需要 64位操作系统,建议使用Linux / Unix /,这里我是在阿里云服务器上进行的部署 CentOs7.4 64bit JDK 1.8+ Maven 3.5.x JDK Maven 的安装 https://blog.csdn.net/hehaitao074/article/details/79806405 下载和构建 下载4.2.0源码版本并解压4.2.0源码版本并构建二进制文件 wget http://mirror.bit.edu.cn/apache/rocketmq/4.2.0/rocketmq-all-4.2.0-source-release.zip unzip rocketmq-all-4.2.0-source-release.zip cd rocketmq-all-4.2.0 mvn -Prelease-all -DskipTests clean install -U mv distribution/target/apache-rocketmq /home/apache-rocketmq cd /home/apache-rocketmq 编译成功的响应 INFO....

Linux下使用Rinetd来实现端口转发

2018-04-02

简介: Rinetd是为在一个Unix和Linux操作系统中为重定向传输控制协议(TCP)连接的一个工具。Rinetd是单一过程的服务器,它处理任何数量的连接到在配置文件etc/rinetd中指定的地址/端口对。尽管rinetd使用非闭锁I/O运行作为一个单一过程,它可能重定向很多连接而不对这台机器增加额外的负担。 方法: 1.从官网下载:http://www.boutell.com/rinetd/ [root@hht rinetdatabase]# wget http://www.boutell.com/rinetd/http/rinetd.tar.gz 2.解压下载的文件: [root@hht rinetdatabase]#tar -xvf rinetd.tar.gz 3.修改rinetd.c 将查询到的65536修改为65535,创建/usr/man目录,在进行安装 [root@hht rinetdatabase]#cd rinetd [root@hht rinetd]#sed -i 's/65536/65535/g' rinetd.c [root@hht rinetd]# ....

(Apache)使用HttpClient方式访问HTTP 有更新!

2017-09-05

Apache使用GET方式访问HTTP 得到访问地址 HttpGet(有参数提供参数) 得到网络访问对象HttpClient,进行连接 得到返回值 如果返回值正常,返回得到的数据对象HttpEntity,得到数据流 注意: GET方式在URL中传递中文参数乱码问题我解决了。 乱码原因:不管客户端采用什么方式给中文字符编码,最终附加到URL中之前,都将在已有的编码基础上再对字符以ISO-8859-1字符集做二次编码然后再附加到URL中。 即所有的非ASCII字符集参数在URL中最终都是ISO-8859-1编码,如果之前已经进行了一次编码,那么这就是在已有编码的基础上二次编码 解码是编码的逆操作,只要在服务器端对客户端进行的编码再进行对应解码即可。过程如下: 1. 在客户端对中文字符串编码,比如使用UTF-8编码 String codeParam = URLEncoder.encode(“中文字符串”, “UTF-8”); 2. 把这个编码好的codeParam作为参数附加到URL地址中; 3. 服务器端getRequestParameter()方法获得该参数(当然这个参数作为URL提交时....

阿里云Centos7下安装Redis及tomcat以及设置自启动 有更新!

2018-03-29

Redis安装配置 安装Redis(root账户下 $ wget http://download.redis.io/releases/redis-4.0.2.tar.gz $ tar xzf redis-4.0.2.tar.gz $ cd redis-4.0.2 $ make $ make install //将可执行程序复制到/usr/local/bin中 启动redis 1.直接启动 $ cd redis-4.0.2 $ cd src $ redis-server 2.加载配置启动 ./redis-server ./redis.conf 3.通过初始化脚本启动Redis (1)配置初始化脚本,将源代码目录里util文件中的redis_init_script文件复制到/etc/init.d目录中,文件名为redis_6379 (2)建立需要的文件夹: 目录名 说明 /etc/redis 存放Redis的配置文件 /var/redis/端口号 存放Redis的持久化文件 (3)修改配置文件,将redis.conf复制到/etc/redis中,以端口号....

在Android Studio中有六种依赖 有更新!

2017-09-05

在Android Studio中有六种依赖 Compile,Provided,APK,Test compile,Debug compile,Release compile Compile compile是对所有的build type以及favlors都会参与编译并且打包到最终的apk文件中。 Provided Provided是对所有的build type以及favlors只在编译时使用,类似eclipse中的external-libs,只参与编译,不打包到最终apk。 APK 只会打包到apk文件中,而不参与编译,所以不能再代码中直接调用jar中的类或方法,否则在编译时会报错 Test compile Test compile 仅仅是针对单元测试代码的编译编译以及最终打包测试apk时有效,而对正常的debug或者release apk包不起作用。 Debug compile Debug compile 仅仅针对debug模式的编译和最终的debug apk打包。 Release compile Release compile 仅仅针对Release 模式的编译和最终的Release ....

滑动隐藏标题栏 有更新!

2017-09-05

在项目开发中,我们常常遇到一些类似需求,比如列表滑动的时候头部的标题在隐藏和显示两种模式切换,实现方法各种各样,但大体思路就是监听滑动控件的触摸事件 这里我们拿ListView做个例子,实现步骤大体分这么几步: 1. 为ListVie添加监听手势 2. 当用户向上滑动是隐藏标题栏 3. 当用户向下滑动时显示标题栏 第一步:为ListVIew添加手势监听 mListView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mFirstY = event.getY(); break; case MotionEvent.ACTION_MOVE: mCurrentY = event.getY(); if (mCurrentY - mFirstY > mTouchSlop) { // 下滑 显示titl....

PHP合并2个数字键数组的值并去重 有更新!

2017-09-05

/** * PHP合并2个数字键数组的值并去重 * @param array $arr1 * @param array $arr2 * @return array * @author hehaitao01 */ function new_array_merge($arr1, $arr2) { if (!is_array($arr1) && !is_array($arr2)) { return array(); } if(!isarray($arr1)){ return $arr2; } if(!is_array($arr2)){ return $arr1; } $arr = array_flip($arr1) + array_flip($arr2); return array_keys($arr); }

PHP Curl工具类 有更新!

2017-09-05

class Util_CurlUtil { /** * @param $url * @return mixed / public static function curlGet($url) { // 1. 初始化 $ch = curl_init(); // 2. 设置选项,包括URL curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); // 3. 执行并获取HTML文档内容 $output = curl_exec($ch); if ($output === FALSE) { echo "CURL Error:" . curl_error($ch); } // 4. 释放curl句柄 curl_close($ch); return $output; } /* * @param $url * @param $postData * @return mixed */ public static functi....

利用Volley对图片的加载 有更新!

2017-09-05

Volley一些介绍就不多说了,利用Volley加载图片主要有3种方式(1)ImageRequest(2)ImageLoader(3)NetWorkImageView 这里我们主要运用的是ImageLoader ImageLoader这个类需要一个Request的实例以及一个ImageCache的实例。图片通过一个URL和一个ImageListener实例的get()方法就可以被加载。从哪里,ImageLoader会检查ImageCache,而且如果缓存里没有图片就会从网络上获取。 Volley的ImageCache接口允许你使用你喜欢的L1缓存实现。不幸的是Volley没有提供默认的实现。在I/O的介绍中展示了BitmapLruCache的一点代码片段,但是Volley这个库本身并不包含任何相关的实现。 ImageCache接口有两个方法,getBitmap(String url)和putBitmap(String url, Bitmap bitmap).这两个方法足够简单直白,他们可以添加任何的缓存实现。 主Activity中的代码 package com.hht.android_....

Android中的缓存处理及异步加载图片类的封装 有更新!

2017-09-05
0 评论 1,124 浏览

一、缓存介绍: (一)、Android中缓存的必要性: 智能手机的缓存管理应用非常的普遍和需要,是提高用户体验的有效手段之一。 1、没有缓存的弊端: 流量开销:对于客户端——服务器端应用,从远程获取图片算是经常要用的一个功能,而图片资源往往会消耗比较大的流量。 加载速度:如果应用中图片加载速度很慢的话,那么用户体验会非常糟糕。 那么如何处理好图片资源的获取和管理呢?异步下载+本地缓存 2、缓存带来的好处: 服务器的压力大大减小; 客户端的响应速度大大变快(用户体验好); 客户端的数据加载出错情况大大较少,大大提高了应有的稳定性(用户体验好); 一定程度上可以支持离线浏览(或者说为离线浏览提供了技术支持)。 3、缓存管理的应用场景: 提供网络服务的应用; 数据更新不需要实时更新,即便是允许3-5分钟的延迟也建议采用缓存机制; 缓存的过期时间是可以接受的(不会因为缓存带来的好处,导致某些数据因为更新不及时而影响产品的形象等) 4、大位图导致内存开销大的原因是什么? 下载或加载的过程中容易导致阻塞; 大位图Bitmap对象是png格式的图....

SQliteDatabase相关操作的工具类 有更新!

2017-09-05
0 评论 1,238 浏览

(一)、MySQLiteDatabaseHelper类的封装: 1、public void getConnection(); /** @作用:执行带占位符的select语句,查询数据,返回Cursor @param sql @param selectionArgs @return Cursor / 2、public Cursor selectCursor(String sql, String[] selectionArgs); /* @作用:执行带占位符的select语句,返回结果集的个数 @param sql @param selectionArgs @return int / 3、public int selectCount(String sql, String[] selectionArgs); /* @作用:执行带占位符的update、insert、delete语句,更新数据库,返回true或false @param sql @param bindArgs @return boolean */ 4、public....

sd卡操作工具类 有更新!

2017-09-05

public class SDCardHelper { private static String TAG = "SDCardHelper"; /* * 判断sdcard是否挂载 / public static boolean isSDCardMounted() { return Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED); } / * 获取sdcard绝对物理路径 / public static String getSDCardPath() { if (isSDCardMounted()) { return Environment.getExternalStorageDirectory().getAbsolutePath(); } else { return null; } } / * 获取sdcard的全部的空间大小。返回MB字节 */ public static long getSDCardSize() { if (isSDCardMounted()) { StatFs ....

利用多线程进行文件的复制 有更新!

2017-09-05

class FileCopy implements Runnable { private File src;// 源文件 private File tar;// 目标文件 private int n;// 分几部分 private int no;// 每部分的编号 public FileCopy(File src, File tar, int n, int no) { this.src = src; this.tar = tar; this.n = n; this.no = no; } @Override public void run() { try { RandomAccessFile rafsrc = new RandomAccessFile(src, "r"); RandomAccessFile raftar = new RandomAccessFile(tar, "rw"); long len = src.length(); long size = len % n == 0 ? len / 4 : len / 4 + 1;// 每部分的字节数 byte[] b = new b....

多线程死锁的模拟 有更新!

2017-09-05

死锁的原因:  线程1锁住资源A等待资源B,线程2锁住资源B等待资源A,两个线程 都在等待自己需要的资源,而这些资源被另外的线程锁住,这些线 程你等我,我等你,谁也不愿意让出资源,这样死锁就产生了。  哲学家进餐问题  解决死锁的办法之一就是:加大锁的粒度。 public class DeadLock02 { // 绑匪:说:你给我500亿,我就放了你儿子,目的:得到了500亿 // 富翁:说:你先放了我儿子,,我就给你钱,目的:赎回儿子。 public static void main(String[] args) { MyThread02 mt1 = new MyThread02(); MyThread02 mt2 = new MyThread02(); mt1.flag = true; mt2.flag = false; new Thread(mt1).start(); new Thread(mt2).start(); } } class Kidnapper{ public void say(){ System.out.println("你给我500亿,我就放了你儿子");....

Bitmap二次采样 有更新!

2017-09-05
0 评论 1,149 浏览

二次采样: (一)、意义或目的: 1、用BitmapFactory解码一张图片时,有时会遇到该错误。这往往是由于图片过大造成的。要想正常使用,则需要分配更少的内存空间来存储。BitmapFactory.decodeFile(imageFile); 2、BitmapFactory.Options.inSampleSize:设置恰当的inSampleSize可以使BitmapFactory分配更少的空间以消除该错误。 3、BitmapFactory.Options提供了另一个成员inJustDecodeBounds。设置inJustDecodeBounds为true后,decodeFile并不分配空间,但可计算出原始图片的长度和宽度,即opts.width和opts.height。有了这两个参数,再通过一定的算法,即可得到一个恰当的inSampleSize。 例如: BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inSampleSize = 4; Bitmap bitmap = BitmapFactory.de....

书签选项卡的分类实现步骤 有更新!

2017-09-05

TabActivity实现选项卡效果的步骤:【了解】 1、写选型卡页面特殊的布局文件: 根节点必须是TabHost,属性android:id=“@android:id/tabhost” 是固定值; 必须有子节点TabWidget,必须有属性android:id=“@android:id/tabs”; 必须有一个布局节点,属性必须是android:id=“@android:id/tabcontent”。 2、继承TabActivity:(以前学习的过程中都是继承android.app.Activity类,但是这里需要继承android.app.TabActivity) 3、创建TabHost对象:通过getTabHost()方法来实现。 4、分别创建TabSpec对象: 通过TabHost对象的newTabSpec()方法创建TabSpec对象; 通过setIndicator()设置标签和图标; 通过setContent()设置内容。 5、TabHost对象添加TabSpec对象。通过TabHost对象的addTab()方法实现添加选项卡。 FragmentActivity 实现选项....

Eclipse转Android Studio

2017-09-05
0 评论 1,547 浏览

第一步:将Eclipse的上Ant编译的项目导出 1)右击项目进行export选择 Gradle模式导出 如下图: 注意在导出完成后又一个提示: 在导入Studio的时候要选择生成的build.gradle导入而不是选择整个项目导入(不然会导入失败) 第二步:向Studio导入转化完成的项目 1)在Ant转化成Gradle完成后剩下的就是导入Studio了(在导入Studio的时要挂上代理,因为Studio要下载Gradle,并且编译一下你的项目),这地方一般会是你的项目的Gradle版本过低,现在最好是使用Gradle 1.0+的版本 2)在Gradle下完后你发现项目还是报错(不报错就不正常了),最常见的就是你的图片资源很多在Studio下是报错的,编不过的,一个是你的.9图片格式不对,一个可能是你原先的项目里将jpg格式的图片强转成png,这个Studio会有严格的检查,对于其他不是很重要的图片问题你可以在Gradle里配置 aaptOptions { cruncherEnabled = false useNewCruncher = false } 这个来关闭它的....