- 博客(73)
- 收藏
- 关注
原创 触摸事件的分发与处理
触屏操作的理解1. MotionEvent : 触屏事件int ACTION_DOWN=0 : 代表downInt ACTION_MOVE=2 ; 代表moveInt ACTION_UP=1 : 代表upgetAction() : 得到事件类型值getX() : 得到事件发生的x轴坐标(相对于当前视图)getRawX() :得到事件发生的x轴坐标(相对于屏幕左顶点)
2017-02-13 18:30:11 481 3
原创 PopupWindow的常用方法
1.PopupWindow(View contentView, int width, int height)构造方法, 指定包含的视图,宽度和高度2.showAsDropDown(View anchor, int xoff, int yoff)显示在指定视图的下面,指定视图,x轴和y轴上的偏移值3.setBackgroundDrawable(Drawable
2017-02-13 18:22:25 406
原创 Selector多状态图片
selector多状态图形在可以在正常,按下,选中等状态下显示不同的图形, 在应用中十分常用在使用时可以把它的xml文件看作一个图片它可以与图片或一起使用
2017-02-13 18:19:48 624
原创 快速排序
背景介绍: 又称划分交换排序(partition-exchange sort),一种排序算法,最早由东尼·霍尔提出。在平均状况下,排序n个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n)算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来 ----- 来自 wikipe
2017-02-09 12:47:02 273
原创 选择排序
背景介绍: 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 ----- 来自 wikipedia算法规则: 将待排序集合(0...n)看成两部分,在起始状态中,一部分为(k..n)的待
2017-02-09 12:45:33 217
原创 冒泡排序
背景介绍: 是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。----- 来自 wikipedia算法规则: 由于算法每次都将一个最大的元素往上冒,我们可以将待排序集合(0...n)看成两部分,一部分
2017-02-09 12:44:11 314
原创 单例模式
定义保证一个类仅有一个实例,并提供一个访问它的全局访问点。Singleton:负责创建Singleton类自己的唯一实例,并提供一个getInstance的方法,让外部来访问这个类的唯一实例。饿汉式: private static Singleton uniqueInstance = new Singleton(); 懒汉式 private static Sin
2017-02-09 12:42:18 282
原创 MVC,MVP,MVVM的区别
MVC软件可以分为三部分视图(View):用户界面控制器(Controller):业务逻辑模型(Model):数据保存各部分之间的通信方式如下:View传送指令到ControllerController完成业务逻辑后,要求Model改变状态Model将新的数据发送到View,用户得到反馈Tips:所有的通信都是单向的。互动模式接受
2017-02-09 12:38:48 1007
原创 Android图片中的三级缓存, 为什么要使用三级缓存
如今的 Android App 经常会需要网络交互,通过网络获取图片是再正常不过的事了假如每次启动的时候都从网络拉取图片的话,势必会消耗很多流量。在当前的状况下,对于非wifi用户来说,流量还是很贵的,一个很耗流量的应用,其用户数量级肯定要受到影响特别是,当我们想要重复浏览一些图片时,如果每一次浏览都需要通过网络获取,流量的浪费可想而知所以提出三级缓存策略,通过网络、本地、内存三级缓存
2017-02-09 12:35:23 1057
原创 ANR简单见解
什么是ANR?ANR:Application Not Responding,即应用无响应。ANR定义:在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。所以一个流畅的合理的应用程序中不
2017-02-09 12:32:04 342
原创 Service的两种启动的区别
1.在Context中通过public boolean bindService(Intent service,ServiceConnection conn,int flags) 方法来进行Service与Context的关联并启动,并且Service的生命周期依附于Context(不求同时同分同秒生!但求同时同分同秒屎!!)。2.通过public ComponentName start
2017-02-09 12:25:53 372
原创 广播(Broadcast Receiver)的两种动态注册和静态注册有什么区别。
静态注册:在AndroidManifest.xml文件中进行注册,当App退出后,Receiver仍然可以接收到广播并且进行相应的处理动态注册:在代码中动态注册,当App退出后,也就没办法再接受广播了
2017-02-09 12:24:20 1938 1
原创 动画有哪两类,各有什么特点?三种动画的区别
tween 补间动画。通过指定View的初末状态和变化时间、方式,对View的内容完成一系列的图形变换来实现动画效果。 Alpha Scale Translate Rotate。frame 帧动画 AnimationDrawable 控制 animation-list xml布局PropertyAnimation 属性动画
2017-02-09 12:21:42 4054
原创 Android怎么加速启动Activity
分两种情况,启动应用 和 普通Activity 启动应用 :Application 的构造方法,onCreate() 方法中不要进行耗时操作,数据预读取(例如 init 数据) 放在异步中操作 启动普通的Activity:A 启动B 时不要在 A 的 onPause() 中执行耗时操作。因为 B 的 onResume() 方法必须等待 A 的 onPause() 执行完成后才能运行
2017-02-09 12:20:00 2732
原创 IntentService的使用场景与特点
IntentService是Service的子类,是一个异步的,会自动停止的服务,很好解决了传统的Service中处理完耗时操作忘记停止并销毁Service的问题优点:一方面不需要自己去new Thread另一方面不需要考虑在什么时候关闭该ServiceonStartCommand中回调了onStart,onStart中通过mServiceHandler发送消息到该hand
2017-02-09 12:16:22 1546
原创 Context区别
Activity和Service以及Application的Context是不一样的,Activity继承自ContextThemeWraper.其他的继承自ContextWrapper每一个Activity和Service以及Application的Context都是一个新的ContextImpl对象getApplication()用来获取Application实例的,但是这个方法只有在
2017-02-09 12:14:44 440
原创 如何自定义控件
自定义属性的声明和获取分析需要的自定义属性在res/values/attrs.xml定义声明在layout文件中进行使用在View的构造方法中进行获取测量onMeasure布局onLayout(ViewGroup)绘制onDrawonTouchEventonInterceptTouchEvent(ViewGroup)状态的恢复与保存
2017-02-09 12:13:42 299
原创 Android的数据存储形式
SQLite:SQLite是一个轻量级的数据库,支持基本的SQL语法,是常被采用的一种数据存储方式。 Android为此数据库提供了一个名为SQLiteDatabase的类,封装了一些操作数据库的apiSharedPreference: 除SQLite数据库外,另一种常用的数据存储方式,其本质就是一个xml文件,常用于存储较简单的参数设置。File: 即常说的文件(I/O)
2017-02-09 12:12:50 263
原创 Intent可以传递哪些数据类型。
通过查询Intent/Bundle的API文档,我们可以获知,Intent/Bundle支持传递基本类型的数据和基本类型的数组数据,以及String/CharSequence类型的数据和String/CharSequence类型的数组数据。而对于其它类型的数据貌似无能为力,其实不然,我们可以在Intent/Bundle的API中看到Intent/Bundle还可以传递Parcelable(包裹化,
2017-02-09 12:11:45 1081
原创 能否保证service不被杀死
目前能否保证service不被杀死Service设置成START_STICKYkill 后会被重启(等待5秒左右),重传Intent,保持与重启前一样提升service优先级在AndroidManifest.xml文件中对于intent-filter可以通过android:priority = "1000"这个属性设置最高优先级,1000是最高值,如果数字越小则优先级越
2017-02-09 12:10:43 292
原创 为什么在Service中创建子线程而不是Activity中
这是因为Activity很难对Thread进行控制,当Activity被销毁之后,就没有任何其它的办法可以再重新获取到之前创建的子线程的实例。而且在一个Activity中创建的子线程,另一个Activity无法对其进行操作。但是Service就不同了,所有的Activity都可以与Service进行关联,然后可以很方便地操作其中的方法,即使Activity被销毁了,之后只要重新与Service建立
2017-02-09 12:02:19 2841 1
原创 ListView 下拉刷新的原理解析
1. 流程分析 下拉刷新最主要的流程是: (1). 下拉,显示提示头部界面(HeaderView),这个过程提示用户"下拉刷新" (2). 下拉到一定程度,超出了刷新最基本的下拉界限,我们认为达到了刷新的条件,提示用户可以"松手刷新"了,效果上允许用户继续下拉 (3). 用户松手,可能用户下拉远远不止提示头部界面,所以这一步,先反弹回仅显示提示头部界面,然后
2017-02-09 11:52:45 1925
原创 查看应用程序最高可用内存
int maxMemory = (int) (Runtime.getRuntime().maxMemory()/1024);Log.d("TAG", "maxMemory is " + maxMemory);
2017-02-09 11:42:49 359
原创 ImageLoader的各种格式DisplayImageOptions 的设置
DisplayImageOptions options; options = new DisplayImageOptions.Builder() .showImageOnLoading(R.drawable.ic_launcher) //设置图片在下载期间显示的图片 .showImageForEmptyUri(R.drawable.ic_launcher)//设置图片
2017-02-06 18:32:34 2390
转载 查看apk签名,查看key签名,adb常用命令
在使用第三方sdk时经常要求绑定签名,这里提供两种查看签名的方式,如果只是想查看一下手机上应用的签名,那么可以安装一个app直接输入包名即可查看该应用的签名,提供一个微信的签名查看apk,下载连接http://download.csdn.NET/detail/sapce_fish/9546282。查看apk的签名方法一:首先用解压软件解压出META-INF目录下
2016-12-29 21:59:48 3183
原创 如何在Android studio中引用.so文件
在build.gradle中的Android标签内添加这么几行 即可 sourceSets { main { jniLibs.srcDirs = ['libs'] } }
2016-12-29 20:09:43 313
转载 android studio 如何生成apk
(1)Android Studio菜单Build->Generate Signed APK (2)弹出窗口 (3)创建密钥库及密钥,创建后会自动选择刚创建的密钥库和密钥(已拥有密钥库跳过) 点击“Create new...”按钮创建密钥库 Key s
2016-12-29 19:30:48 309
原创 WebView 的使用及小知识点
WebView在开发过程中应该注意几点: 1.AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Webpage not available错误。 2.如果访问的页面中有Javascript,则webview必须设置支持Javascript。 WebSettings webSetti
2016-12-27 20:19:20 747
原创 IntentService
在Android开发中,我们或许会碰到这么一种业务需求,一项任务分成几个子任务,子任务按顺序先后执行,子任务全部执行完后,这项任务才算成功。那么,利用几个子线程顺序执行是可以达到这个目的的,但是每个线程必须去手动控制,而且得在一个子线程执行完后,再开启另一个子线程。或者,全部放到一个线程中让其顺序执行。这样都可以做到,但是,如果这是一个后台任务,就得放到Service里面,由于Service和Ac
2016-12-27 19:47:38 179
原创 andrid 通知栏的使用
想做个通知栏提示,写下如下代码 Notification notification2 = new Notification(R.drawable.advise2, "通知测试", System.currentTimeMillis()); notification2.setLatestEventInfo(getActivity(), "testTitle", "testContent
2016-12-26 18:35:35 265
原创 如何获取联系人列表
private ListView contactListView; private ContactsAdapter adapter; private ListContacts> contactsList = new ArrayList(); @Override protected void onCreate(Bundle savedInstanceState) { super.o
2016-12-26 17:37:33 429
原创 SQLite数据存储的基本用法
1. 创建数据库并根据需求修改数据库内的表import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class MyDatabasesHelper extends S
2016-12-26 14:55:35 410
原创 SP存储
sharedPreferences存储的路径:data/data/packagename/shared_prefs目录下 //MODE_PRIVATE表示当同样文件名的时候,所写的内容将会覆盖原文件的内容 //MODE_APPEND表示当同样文件名的时候.就往该文件内追加内容 SharedPreferences sharedPreferences = getShare
2016-12-23 00:09:38 6339
原创 使用本地广播
private IntentFilter intentFilter; private LocalRecevier localRecevier; private LocalBroadcastManager localBroadcastManager; private Button button; @Override protected void onCreate(Bundle saved
2016-12-22 21:01:35 228
原创 广播的态注册和动态注册的区别
1.静态注册 当你的应用程序关闭了,如果有广播信息来,你写的广播接收器同样的能接受到, 他的注册方式就是在你的应用程序中的AndroidManifast.xml进行注册 比如 2.动态注册 当应用程序结束了,广播自然就没有了,比如你在activity中的onCreate或者onResume中注册广播
2016-12-22 20:32:59 362
原创 网络是否可用的广播
private IntentFilter intentFilter; private NetWorkChangReceiver netWorkChangReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
2016-12-22 20:23:23 193
原创 Fragment与Activity之间的通信
1.在Activity中如何获取Fragment的实例: Fragment fragment = getFragmentManager().findFragmentById(R.id.right_layout);2.在Fragment中如何获取和当前碎片相关联的Activity的实例: MainActivity mainActivity = (MainActi
2016-12-22 16:54:26 214
原创 动态添加Fragment
//1.创建待添加的fragment的实例MyFragment fragment = new MyFragment();//2.获取FragmentManagerFragmentManager fragmentManager = getFragmentManager();//3.开启一个事务FragmentTransaction transaction
2016-12-22 16:51:46 289
原创 如何判断当前是在哪一个Activity
这个技巧将教会你,如何根据程序当前的界面就能判断出这是哪个Activity.也许你会觉得很可笑,自己写的代码怎么会分不出来呢,呵呵,你忘记了你也有可能接手别人的代码呀!有时候需要在某个界面上修改一些很简单的东西,但是你半天找不到这个界面对应的Activity是哪一个,接下来教你快速解决这个问题!!!1.首先创建一个BaseActivity继承于Activity,然后在BaseActiv
2016-12-21 11:41:19 1677
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人