Android开发
wangsf1112
这个作者很懒,什么都没留下…
展开
-
Java注解,以及在框架中的使用
在Android开发中经常会使用到各种框架,如Retrofit、ButterKnife等,而这些框架中往往通过定义一些注解提供给我们使用,并且通过遵循框架暴露的简单规则就可以很方便的使用框架从而简化我们的开发过程。因此,今天我们就了解下注解的定义以及如何使用。注解,为在代码中添加信息提供了一种形式化的方法,使我们可以在稍后的某个时刻非常方便的使用这些数据。Java中提供了三种类型的注解:@Override 表示当前的方法定义将覆盖父类中的方法。如果不小心拼错,编译器会发出错误提示。 @Depr原创 2020-06-13 13:12:35 · 482 阅读 · 0 评论 -
Android事件传递机制,与滑动冲突解决
Android的事件传递机制是处理控件触摸等事件需要基本掌握的,而且网上资料也很多,本文只是简要介绍一下。而前一段时间在项目中对于滑动控件的嵌套使用导致内部控件的滑动受到影响,因此,本文重点介绍一下滑动控件嵌套使用时的冲突解决。首先,介绍一下事件传递机制,Android的事件分发与传递过程是在Activity、ViewGroup、View中进行传递的,主要涉及dispatchTouchEvent()、onInterceptTouchEvent()、onTouchEvent()三个方法。dispatc原创 2020-05-16 22:58:55 · 859 阅读 · 0 评论 -
IdleHandler原理以及延迟初始化方案实现
很多人在Android项目中都会遇到希望一些操作延迟一点处理,一般会使用Handler.postDelayed(Runnable r, long delayMillis)来实现,但是又不知道该延迟多少时间比较合适,因为手机性能不同,有的性能较差可能需要延迟较多,有的性能较好可以允许较少的延迟时间。之前在项目中对启动过程进行优化,用到了IdleHandler,它可以在主线程空闲时执行任务,而不影响其他任务的执行。先看一下怎么用吧: Looper.myQueue().addIdleHa原创 2020-05-09 23:39:58 · 3499 阅读 · 0 评论 -
Android卡顿自动化检测实现
最近在看一篇Android文章的时候看到一种检测Android卡顿的线上实现方案,然后自己动手简单实现了下。它的原理源于Android的消息处理机制,一个线程不管有多少Handler,它只会有一个Looper存在,主线程执行的任何代码都会通过Looper.loop()方法执行。而在Looper函数中,它有一个mLogging对象,这个对象在每个message处理前后都会被调用。主线程发生了卡顿...原创 2020-05-04 17:09:20 · 1172 阅读 · 0 评论 -
LocalBroadcastManager 的使用和源码分析
LocalBroadcastManager是Android Support v4包提供的一个工具,用来在同一个应用内的不同组件间发送Broadcast的。相对 BroadcastReceiver,它只能用于应用内通信,安全性更好,同时拥有更高的运行效率。注意,这是同一个应用,也就是其他应用就算和你共进程,也是无法互相发送广播的。因此可以确保隐私数据不会泄露。那既然是同一个应用,为什么还要多此一...原创 2017-07-07 20:52:32 · 873 阅读 · 0 评论 -
Android一键锁屏功能的实现
前不久换了部新手机,因为原来用的手机原装了一键锁屏的应用,用的还习惯,新手机上没有,就想着找一个装上,后来在网上搜了下一键锁屏的实现,自己拿来改了改,安装后感觉还可以。现在分享出来。源码:1. MainActivity.javaimport android.app.admin.DevicePolicyManager;import android.content原创 2017-10-12 19:32:59 · 4496 阅读 · 4 评论 -
Android设置Dialog的屏幕位置、背景、大小
1. 设置Dialog在窗口底部,且宽度最大。可以使用DialogFragment实现底部弹窗布局(http://blog.csdn.net/caroline_wendy/article/details/51792532 )。Window window = getDialog().getWindow();WindowManager.LayoutParams layoutParam原创 2017-06-13 10:10:03 · 14784 阅读 · 0 评论 -
Activity isFinishing()判断Activity的状态
在Activity中调用finish()或按返回键退出时,若有资源被其他对象引用不能释放(如context被某个单例对象引用或正在线程中被使用),则activity不会被调用onDestory()方法。isFinishing() 可用来判断Activity是否处于活跃状态(false)还是等待回收状态(true)。isDestroyed()原创 2018-01-19 17:14:18 · 10646 阅读 · 2 评论 -
Android应用内多语言切换
在app内有时候需要用户手动切换语言,以适应不同的使用场景,正常来说如果做了语言适配的话,app语言会跟随系统语言进行自动适配。但有时候希望在app内进行语言选择和设置。设置app的语言环境,直接上代码 /** * 修改APP语言设置 * @param locale 如Locale.CHINESE、Locale.ENGLISH等 */ publ...原创 2019-05-05 18:15:42 · 2356 阅读 · 0 评论 -
通过反射直接获取Application对象
在Android开发中Context或者Application对象使用是比较多的,在Activity或者Service中可以直接使用this,比较方便。但是如果在其他类中还需要传入Context对象,那么有没有方法可以直接获取Application对象呢?通过反射方式调用系统方法可以获取: public static Application getApplicationByRefl...原创 2019-05-05 18:26:21 · 2917 阅读 · 1 评论 -
android获取视频、图片时添加防盗链
使用HTTP协议时,可以利用头信息中的Referer做防盗链。我们在一些网站的网页里访问图片的时候,在图片本站是可以正常看到的,但在外头就不能看到了,这是因为在http的header信息中的referer元素。还有是做统计的时候,我们需要统计出来用户是从哪个地方,什么时间访问网站的。在HTTP协议中,头信息中有一个很重要的选项 referer,referer 表示的是网页的原创 2017-06-13 17:50:34 · 4212 阅读 · 0 评论 -
Android ListView记录和恢复滑动位置
有时在Activity或view切换时,需要恢复listView之前滚动到的位置。在ListView停止滑动后记录滑动到的位置:int scrollPos;int scrollTop;listview.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public原创 2017-06-15 12:28:02 · 901 阅读 · 0 评论 -
Android开发中通过源码彻底理解ListView工作原理
Android开发中ListView是用的非常多的控件,然而对其原理只有一个大概的了解,具体是怎么实现的呢?网上的这篇文章写的比较详细。-------------转自:http://www.111cn.net/sj/android/91132.htm ----------------------------------ListView控件是Android应用开发中原生控件中最复转载 2016-04-26 19:23:38 · 825 阅读 · 0 评论 -
如何让Toast消息在应用退出后不再显示
Android中Toast的消息是放在一个队列中的,系统会依次从队列中取出并显示。而我们在应用中,有时候希望在应用退出后不再显示还未显示过的Toast消息。比如,在代码中访问某个网络接口,待其返回后给出相应的Toast信息提示用户,然而有时候我们应用已经退出(或不再前台)了,还没有返回结果,但仍然会提示Toast。那么,如何让应用在退出(或当前屏幕不显示)之后不再显示Toast消息,我们通过可原创 2016-04-19 14:09:21 · 3072 阅读 · 0 评论 -
判断广播是否已注册
在做Android项目时,有时候需要知道某个BroadcastReceiver是否已经注册,从而决定是发送广播让Receiver处理,还是通过其他方式处理。那么,如何判断某个广播接收者BroadcReceiver是否已经注册了呢?PackageManager 类中提供了 List queryBroadcastReceivers(Intent intent, int原创 2016-04-18 18:53:09 · 26894 阅读 · 4 评论 -
HandlerThread源码分析及使用
Android中Handler在使用时,一般都在UI主线程中执行,因此Handler在处理消息时,不能做一些很耗时的操作,否则将出现ANR错误。因此,Android中专门提供了HandlerThread类,来解决该类问题。HandlerThread类源码在frameworks/base/core/java/android/os/HandlerThread.java文件中。源码:原创 2016-05-03 17:19:16 · 416 阅读 · 0 评论 -
Android中IntentService源码分析及其使用
在Android中,Activity不能直接进行耗时操作,一般可启动子线程来完成耗时操作,但这样做有个缺点,一旦Activity不再可见,Activity所在的进程成为后台进程,而内存不足时后台进程可能会被系统杀死。一般情况下,服务进程的优先级高于后台进程。因此,我们可以启动一个Service,并在Service中创建子线程执行耗时操作。Android帮我们提供了一个类来解决这个问题,Inte原创 2016-05-04 18:35:52 · 386 阅读 · 0 评论 -
获取Android设备上的所有存储设备
Android系统提供了Environment.getExternalStorageDirectory()接口获得存储设备的路径,但是这个接口往往给出的结果并不是我们想要的,在某些设备上它返回的是手机内部存储,某些设备上返回的手机外部存储。还有就是某些Android设备支持扩展多个sdcard,这个时候想要获得所有存储器的挂载路径,这个接口是没有办法办到的。那么,Android系统的文件管原创 2016-05-16 18:08:18 · 10402 阅读 · 2 评论 -
Android中线程的正确使用
最近看到一篇讲解Android线程及其使用的文章,比较详细,在此分享出来,感谢原作者的分享。----------------------------- 来源:http://android.jobbole.com/82440/ ---------------------------------------线程是程序员进阶的一道重要门槛。对于移动开发者来说,“将耗时的任务放到子转载 2016-05-05 19:25:46 · 10474 阅读 · 1 评论 -
Android一种限制同时下载个数的下载管理器实现
在Android开发中有时候会遇到需要对下载过程进行一些限制,比如只能同时下载一个文件或者允许同时下载N个文件的情况,但是不能让用户在下载完成一个或几个之后才能再次点击。因此需要对下载任务进行保存,在下载完一个后自动下载任务队列中的下一个。这种情况也是我在实际开发中遇到过的,因此分享出来,有些地方可能还不完善,但基本使用没有问题。public class DownloadManager {原创 2016-11-10 19:09:36 · 1991 阅读 · 0 评论 -
Android中判断当前API的版本号
Android中由于不同版本API会有一些变化,导致一些较早版本可能不支持新的方法,或者某些功能处理过程不太一样,需要判断当前版本然后进行适当的处理。那么,如何判断当前API的版本号呢?例如判断api版本号是否大于等于19: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {...} 其中原创 2016-05-31 13:48:43 · 60819 阅读 · 0 评论 -
Android中连续按两次返回键退出应用
方法1: private long exitTime; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { if原创 2016-04-28 18:59:31 · 434 阅读 · 0 评论