圆形进度(ProgressWheel)

This is a custom component for Android intended for use instead of a progress bar. {#user-content-a-complete-walkthrough-of-how-to-use-this-component-in-your-app.anchor}A complete walkthrough of how to use this component in your app XML: To implement the view in your xml layout do the following: Add the following to your attrs.xml file (in res/values): ``` <declare-styleable name="ProgressWheel"> <attr name="text" format="string" /> <attr name="textColor" format="color" /> <attr name="textSize" format="dimension" /> <attr name="barColor" format="color" /> <attr name="rimColor" format="color" /> <attr name="rimWidth" format="dimension" /> <attr name="spinSpeed" format="integer" /> <attr name="circleColor" format="color" /> <attr name="radius" format="dimension" /> <attr name="barWidth" format="dimension" /> <attr name="barLength" format="dimension" /> <attr name="delayMillis" format="dimension"/> <attr name="contourColor" format="color"/> <attr name="contourSize" format="float"/> </declare-styleable> ``` Add the following code to the root view of your layout:xmlns:ProgressWheel="http://schemas.android.com/apk/res/com.visualdenim.schooltraq" ...

2015年1月6日 · 2 分钟 · 天边的星星

Android应用如何监听自己是否被卸载及卸载反馈功能的实现

一个应用被用户卸载肯定是有理由的,而开发者却未必能得知这一重要的理由,毕竟用户很少会主动反馈建议,多半就是用得不爽就卸,如果能在被卸载后获取到用户的一些反馈,那对开发者进一步改进应用是非常有利的。目前据我所知,国内的Android应用中实现这一功能的只有360手机卫士、360平板卫士,那么如何实现这一功能的? 我们可以把实现卸载反馈的问题转化为监听自己是否被卸载,只有得知自己被卸载,才可以设计相应的反馈处理流程。以下的列表是我在研究这一问题的思路: 1,注册BroadcastReceiver,监听&#8221;android.intent.action.PACKAGE_REMOVED&#8221;系统广播 结果:NO。未写代码,直接分析,卸载的第一步就是退出当前应用的主进程,而此广播是在已经卸载完成后才发出的,此时主进程都没有了,去哪onReceive()呢? 2,若能收到&#8221;将要卸载XX包&#8221;的系统广播,在主进程被退出之前就抢先进行反馈处理就好了,可惜没有这样的系统广播,不过经过调研,倒是发现了一个办法,读取系统log,当日志中包含&#8221;android.intent.action.DELETE&#8221;和自己的包名时,意味着自己将要被卸载。 结果:NO。调试时发现此方法有两个缺陷,(1)点击设置中的卸载按钮即发出此Intent,此时用户尚未在弹框中确认卸载;(2)pm命令卸载不出发此Intent,意味着被诸如手机安全管家,豌豆荚等软件卸载时,无法提前得知卸载意图。 3,由于时间点不容易把控,所以干脆不依赖系统广播或log,考虑到卸载过程会删除&#8221;/data/data/包名&#8221;目录,我们可以用线程直接轮询这个目录是否存在,以此为依据判断自己是否被卸载。 结果:NO。同方法1,主进程退出,相应的线程必定退出,线程还没等到判断目录是否存在就已经被销毁了。 4,改用C端进程轮询&#8221;/data/data/包名&#8221;目录是否存在 结果:YES。借助Java端进程fork出来的C端进程在应用被卸载后不会被销毁。 OK,上代码! Activity启动时fork出C端进程轮询目录: ![复制代码](http://common.cnblogs.com/images/copycode.gif) ``` 1 package main.activity; 2 3 import pym.test.uninstalledmoniter.R; 4 import android.app.Activity; 5 import android.os.Bundle; 6 import android.util.Log; 7 8 /** 9 * @author pengyiming 10 * @note 监听此应用是否被卸载,若被卸载则弹出卸载反馈 11 * 12 / 13 14 public class UninstalledMoniterActivity extends Activity 15 { 16 / 数据段begin / 17 private static final String TAG = “UninstalledMoniterActivity”; 18 / 数据段end / 19 20 / 函数段begin / 21 private native void init(); 22 static 23 { 24 Log.d(TAG, “load libuninstalled_moniter”); 25 System.loadLibrary(“uninstalled_moniter”); 26 } 27 28 @Override 29 public void onCreate(Bundle savedInstanceState) 30 { 31 super.onCreate(savedInstanceState); 32 Log.d(TAG, “onCreate”); 33 34 setContentView(R.layout.uninstalled_moniter_layout); 35 36 init(); 37 } 38 / 函数段end */ 39 } ...

2015年1月6日 · 7 分钟 · 天边的星星

android 链接mysql数据库

android下可以连接远程数据的,不过你远程的数据库服务的要开启远程,具体设置[http://www.ways2u.com/knowledge/?post=142](http://www.ways2u.com/knowledge/?post=142) Java利用JDBC访问数据库的编程步骤 http://www.ways2u.com/?post=76 android 链接mysql数据库实例: package com.hl; import java.sql.DriverManager; import java.sql.ResultSet; import com.mysql.jdbc.Connection; import com.mysql.jdbc.Statement; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class AndroidMsql extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btn=(Button)findViewById(R.id.btn); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { sqlCon(); } }); } private void mSetText(String str){ TextView txt=(TextView)findViewById(R.id.txt); txt.setText(str); } ...

2015年1月6日 · 1 分钟 · 天边的星星

mysql计算经纬度距离

mysql中计算经纬度方法 select * ,3956*2*asin(sqrt(power(sin((122.4058-abs(dest.lat))*pi()/180/2),2)+cos(122.4058/180)*cos(abs(dest.lat)*pi()/180)*power(sin((37.7907-dest.lon)*pi()/180/2),2))) as distance from sp_zxcplace dest HAVING distance<10000 order by distance Mysql根据经纬度算距离返回米 亲测ok SELECT pId,name,lon,lat, ROUND(6378.138*2*ASIN(SQRT(POW(SIN((34.3574030000*PI()/180-lat*PI()/180)/2),2)+COS(34.3574030000*PI()/180)*COS(lat*PI()/180)*POW(SIN((108.9263460000*PI()/180-lon*PI()/180)/2),2)))*1000) AS distance FROM sp_zxcplace HAVING distance<10000 ORDER BY distance

2015年1月2日 · 1 分钟 · 天边的星星

10大优秀的移动Web应用程序开发框架推荐

在最近几年里,移动互联网高速发展、市场潜力巨大。继计算机、互联网之后,移动互联网正掀起第三次信息技术革命的浪潮,新技术、新应用不断涌现。今天这篇文章向大家推荐10大优秀的移动Web开发框架,帮助开发者更加高效的开发移动Web应用。 Sencha Touch Framework Sencha Touch 是世界上第一个基于 HTML5 的移动 Web 开发框架,支持最新的 HTML5 和 CSS3 标准,全面兼容 Android 和 Apple iOS 设备,提供了丰富的 WEB UI 组件,可以快速的开发出运行于移动终端的应用程序。 jQuery Mobile jQuery Mobile 框架把“write less, do more”精神提升到更高的层次。jQuery 移动框架可以帮助你设计一个可运行于所有流行智能手机和平板平台的应用程序,而不需要为每种移动终端都开发一个特别的版本。 jQTouch jQTouch 是一款 jQuery 的插件,用于手机上实现动画、列表导航、默认应用样式等各种常见UI效果。支持 iPhone、Android 等手机。 The M Project The-M-Project 是一个包含各种UI组件,基于 jQuery 开发 HTML5 应用程序的移动Web应用框架,支持 iOS、Android、Palm webOS和BlackBerry 等平台。 DHTMLX Touch – HTML5 JavaScript Framework for Mobile DHTMLX Touch 是一个基于 HTML5 的免费 JavaScript 库,用于构建跨平台的移动 Web 应用程序。这不只是一组UI部件,而是一个完整的框架,它允许你为手机等触摸设备创建强大的Web应用程序。 WebApp.Net WebApp.Net 提供了很多的 API,因此可以帮助你节省很多工作了。不需要花时间去进行 Ajax 调用的编码,因为已经内置了,另外还有很多其它内置功能,提供了详细的文档和应用演示。 ...

2015年1月2日 · 1 分钟 · 天边的星星

Android 图片的内存优化

在Android应用中,当对图片本身进行操作时,应该尽量不要是使用setImageBitmap、setImageResource、BitmapFactory.decodeResource来设置一张大图,因为这些方法在完成Decode后,最终都是通过java层的createBitmap()方法来完成的,这需要消耗更多的内存。因此,应该先通过BitmapFractory.decodeStream方法创建出一个bitmap,然后再将其设置为imageview的source。decodeStream最大的优点是直接调用JNI–>nativeDecodeAsset()来完成decode,而不需要在使用java层的createBitmap,从而节省了java层的空间。如果在读取图片是加上图片的Config参数,可以更有效的减少加载的内存,从而更有效的阻止抛出内存溢出。另外decodeStream直接用图片来读取字节码,不会根据机器的各种分辨率来自动适应。当使用了decodeStream后,需要在hdpi和mdpi中配置相应的图片资源,否则在不同分辨率的机子上都是同样大小(像素点数量),显示出来的大小就不对了。 优化Dalvik虚拟机的堆内存分配。对Android平台来说,其托管层使用的时Dalvik Java VM,从目前的表现来看还有很多地方可以优化处理,比如在开发一些大型游戏或者耗资源的应用中可以考虑用手动干预GC处理,使用类dalvik.system.VMRuntime提供的setTargetHeapUtilization可以增强程序堆内存的处理效率。使用方法如下: private final static float TARGET_HEAP_UTILIZATION=0.75f; VMRuntime.getRuntime().setTargetHeapUtilazation(TARGET_HEAP_UTILIZATION); 另外还可以用如下方法定义堆内存的大小,这样就实现了优化功能。 private final static int CWJ_HEAP_SIZE=6*1024*1024; VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE);//设置Heap的最小内存6M。

2015年1月2日 · 1 分钟 · 天边的星星

微信开发值得推荐的开源项目

微信开发值得推荐的开源项目 http://www.csdn.net/article/2014-04-16/2819340 微信公众平台开发(java)用什么框架最好呢? http://www.oschina.net/question/1462914_162471 weixin 1 0 微信开发框架 JAVA版 http://download.csdn.net/detail/april127/7675879 微信公众平台技术方案- http://wenku.baidu.com/link?url=3JxSgzmrWFZdXAHJ9jf1bqhdO-FyGbhWYWIy7N_fBmqkMJ9MOvEe-sPXL76eeWNDV8w7PJpl21o4GQH6-M8FN8SEPuuhyY8GiWzvxTacObu http://www.eoeandroid.com/thread-317474-1-1.html http://tieba.baidu.com/p/3237760264 微信公众帐号: 【凡尘工作室】的开源代码 https://github.com/ostrichmyself/bae_weichat

2014年12月29日 · 1 分钟 · 天边的星星

谷歌公司发布程序员养成指南,推荐相关在线课程

进入谷歌那样的大公司工作是多少程序员的人生梦想!最近,Google Education推荐了一系列计算机相关课程,为想要学习编程的大学生们指明方向,非大学生也可以来学习。 ————————以下内容搬运自Google Education———————— 要成为一名成功的软件工程师,你必须具备扎实的计算机科学基础。本自学指南适用于想要学习编程的大学生们,分为专业方向和非专业方向两个系列。你可以借助这个指南进行自学,但请首先修够你的专业学分,以保证顺利毕业。 本课程表中的课程不能代替大学课程,但它们能够帮助你进一步学习计算机科学,或者对这个领域建立初步理解。 关于如何使用本学习指南的4点建议: 请考虑自己的实际情况进行学习。 如果你还想学习《指南》之外的其他课程,尽管上吧! 本指南仅供参考,即使学完这上面的所有课程,也不能保证你一定能进入谷歌工作。 本指南不定期更新。你可以在Google +上关注 Google for Students +Page,随时获取更多资讯。 【为进军学术界作准备的课程】 计算机科学导论课程 你可以选择提供在线编程工具的计算机导论课程。 课程推荐: 学习至少一种面向对象编程语言,如C++,Java 或Python 入门课程: MIT Intro to Programming in Java, Google’s Python Class, Python Open Source E-Book 中级课程: Udacity’s Design of Computer Programs, 学习其他的编程语言 To learn list:Java Script, CSS, HTML, Ruby, PHP, C, Perl, Shell. Lisp, Scheme. 测试和提高自己的编程能力 例如:排查故障,创建测试,破解软件 相关课程: 学习逻辑推理和离散数学 相关课程: MIT Mathematics for Computer Science, 深入理解算法和数据结构 学习基本的数据类型,如堆栈、队列和数据包; 了解排序演算法,如快速排序,二路归并排序和堆排序; 了解数据结构,如二叉搜索树,红黑树和哈希表。 相关课程: ...

2014年12月25日 · 1 分钟 · 天边的星星

Android内存泄露相关知识总结

在开发应用过程中,我们可以使用现成的工具来查看内存泄漏的情况。例如DDMS和MAT,MAT是Memory Analyzer Tool的缩写,MAT可以安装eclipse插件(更新地址http://download.eclipse.org/mat/1.4/update-site/),可以使用比插件方便的RCP(下载地址:http://www.eclipse.org/mat/downloads.php)。对于MAT的使用我们暂时不详细讲解,小伙伴们可以去(http://www.eclipse.org/mat/中查看Documentation中查看,里面还有blog可以看) 。 查看内容泄漏的方法步骤: 1.生成.hprof文件(使用DDMS生成,有必要的话,我给小伙伴录制一个视频讲解教程) 2.使用MAT导入.hprof文件 3.使用MAT的视图工具分析内存 备注:由于有文件保存,肯定会用到SD卡,用模拟器的小伙伴不要忘记创建SD卡和让测试应用有读写SD卡的权限。如果真的没有SD卡,小伙伴可以使用android.os.Debug中的方法手动指定.hprof的内存(不是运行时内存,指的是系统的内存存储)位置,例如 xxxButton.setOnclickListener(new View.OnClickListener(){ android.os.Debug.dumpHprofData(“/data/tem/XXX.hprof”);//文件路径可以是SD卡路径 });如果使用android.os.Debug.dumpHprofData()方法手动生成的.hprof文件,需要使用Android/Tools/ hprofconv xxx.hprof yyy.hprof把原来的xxx.hprof转换成yyy.hprof文件(这个文件才是MAT分析的文件)。 目前查看内存分析查找内存泄漏的方法还有以下几种 1.使用命令查看某个进程的内存。例如创建一个脚本文件xxx.sh.该文件的内容指定程序1秒钟输出某个进程的内存使用情况 代码如下 #!/bin/bash While true; do adb shell procrank | grep “进程名称” Sleep 1 done 2.使用Top命令查看内存 Adb shell top -m 10//查看使用资源最多的10个进程 Adb shell top|grep 进程名称 //查看指定进程的内存 3. free命令 Free命令用来显示内存使用情况,使用权限是所有用户。格式如下 Free [-b|-k|-m] [-o] [-s delay] [-t] [-v] 参数 -b/-k/-m表示以B、KB、MB为单位显示内存使用情况 参数 -s delay 显示每隔多少秒数来显示一次内存使用情况 参数 -t 显示内存总和列 参数 -o 不显示缓冲区调节列 Android 为应用进程分配的内存上限保存在ANDROID_SOURCE/system/core/rootdir/init.rc脚本中。

2014年12月19日 · 1 分钟 · 天边的星星

Git使用基础篇

Git是一个分布式的版本控制工具,本篇文章从介绍Git开始,重点在于介绍Git的基本命令和使用技巧,让你尝试使用Git的同时,体验到原来一个版 本控制工具可以对开发产生如此之多的影响,文章分为两部分,第一部分介绍Git的一些常用命令,其中穿插介绍Git的基本概念和原理,第二篇重点介绍 Git的使用技巧,最后会在Git Hub上创建一个开源项目开启你的Git实战之旅 1、Git是什么 Git在Wikipedia上的定义:它是一个免费的、分布式的版本控制工具,或是一个强调了速度快的源代码管理工具。Git最初被Linus Torvalds开发出来用于管理Linux内核的开发。每一个Git的工作目录都是一个完全独立的代码库,并拥有完整的历史记录和版本追踪能力,不依赖 于网络和中心服务器。 Git的出现减轻了许多开发者和开源项目对于管理分支代码的压力,由于对分支的良好控制,更鼓励开发者对自己感兴趣的项目做出贡献。其实许多开源项目 包括Linux kernel, Samba, X.org Server, Ruby on Rails,都已经过渡到使用Git作为自己的版本控制工具。对于我们这些喜欢写代码的开发者嘛,有两点最大的好处,我们可以在任何地点(在上班的地铁 上)提交自己的代码和查看代码版本;我们可以开许许多多个分支来实践我们的想法,而合并这些分支的开销几乎可以忽略不计。 2、Git 1+1 现在进入本篇文章真正的主题,介绍一下Git的基本命令和操作,会从Git的版本库的初始化,基本操作和独有的常用命令三部分着手,让大家能够开始使用Git。 Git通常有两种方式来进行初始化: git clone: 这是较为简单的一种初始化方式,当你已经有一个远程的Git版本库,只需要在本地克隆一份,例如’git clone git://github.com/someone/some_project.git some_project’命令就是将’git://github.com/someone/some_project.git’这个URL地址的远程版 本库完全克隆到本地some_project目录下面 git init和git remote:这种方式稍微复杂一些,当你本地创建了一个工作目录,你可以进入这个目录,使用’git init’命令进行初始化,Git以后就会对该目录下的文件进行版本控制,这时候如果你需要将它放到远程服务器上,可以在远程服务器上创建一个目录,并把 可访问的URL记录下来,此时你就可以利用’git remote add’命令来增加一个远程服务器端,例如’git remote add origin git://github.com/someone/another_project.git’这条命令就会增加URL地址为’git: //github.com/someone/another_project.git’,名称为origin的远程服务器,以后提交代码的时候只需要使用 origin别名即可 3、Git的基本命令 现在我们有了本地和远程的版本库,让我们来试着用用Git的基本命令吧: **git pull:**从其他的版本库(既可以是远程的也可以是本地的)将代码更新到本地,例如:’git pull origin master’就是将origin这个版本库的代码更新到本地的master主枝,该功能类似于SVN的update **git add:**是将当前更改或者新增的文件加入到Git的索引中,加入到Git的索引中就表示记入了版本历史中,这也是提交之前所需要执行的一步,例如’git add app/model/user.rb’就会增加app/model/user.rb文件到Git的索引中 **git rm:**从当前的工作空间中和索引中删除文件,例如’git rm app/model/user.rb’ **git commit:**提交当前工作空间的修改内容,类似于SVN的commit命令,例如’git commit -m “story #3, add user model”‘,提交的时候必须用-m来输入一条提交信息 **git push:**将本地commit的代码更新到远程版本库中,例如’git push origin’就会将本地的代码更新到名为orgin的远程版本库中 ...

2014年12月18日 · 3 分钟 · 天边的星星