作为一名Android世界的搬运工,每天搬砖已经够苦够累了,走在坑坑洼洼的道路一不小心就掉坑里了。

SDK常用工具类

Android SDK中本身就拥有很多轮子,熟悉这些轮子,可以提高我们的搬砖效率。

  • android.text.TextUtils

    字符串操作常用方法:isEmpty()join()split()

    if(!TextUtils.isEmpty(text)){
    //do something
    }
  • android.webkit.URLUtil

    链接相关常用方法:isHttpUrl()isNetworkUrl()decode()

  • android.util.Patterns android.support.v4.util.PatternsCompat

    该类定义了许多常用正则表达式常量,可直接拿来用,例如:IP地址IP_ADDRESS,网址WEB_URL,Email地址EMAIL_ADDRESS,电话PHONE

    有了它,妈妈再也不用担心我正则表达式的问题了。

    Matcher urlMatcher = Patterns.WEB_URL.matcher(text);
    if (urlMatcher.find()) {
    //find url
    }
  • android.telephony.PhoneNumberUtils

    电话相关工具类

  • android.text.format.Formatter

    格式化文件大小,以GB,MB,KB为单位。

  • android.media.ThumbnailUtils

    创建图片或视频缩略图

    常用方法:createImageThumbnail()createVideoThumbnail()

  • android.database.DatabaseUtils

    数据库操作相关工具类

常见的坑

以下经验是AC在开车时的出现事故的小笔记。其中的解决方案,由于飚车环境差异和AC本人的能力有限,各位老司机可以酌情参考,同时也欢迎老司机评论指出。

  1. Handler处理异步操作时 用isFinishing()判断当前的Activity是否存在: 比如在联网请求数据回调回来之后,在Handler的handleMessage()方法中,用

    isFinishing() 判断当前的Activity是否存在,否则极易出现空指针等异常。

  2. 在ListFragment中set footer,不要在onCreateView()中设置; 要在onActivityCreate()中设置 否则会Caused by: java.lang.IllegalStateException: Content view not yet created

  3. 如果页面中的的样式如果出现了很奇怪的渲染(花屏,闪烁等异常),看看所在的Activity或者View是否添加了硬件加速。

  4. setCustomAnimations方法要在replace,remove等方法之前,否则设置无效。

     
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.setCustomAnimations(R.anim.push_up_out, 0);
    ft.replace(R.id.frame_content,mFragment);
     
  5. 在onCreate中获取到View的高度和宽度,直接调用View.getHeight()View.getWidth(),均得到0。应该使用以下方式获取View的高度或宽度。

    mView.post(()->{
    Log.d("width:"+mView.getWidth()+",height:"+mView.getWidth());
    });
  6. ActivityA通过startActivityForResult()启动了ActivityB。如果ActivityB的launchMode是singleTop或singleTask就要注意了,ActivityA的onActivityResult(int requestCode,int resultCode,Intent data)方法中的resultCode一定是Activity.RESULT_CANCELED

  7. startActivity的时候闪退并出现了以下log:

    • java.lang.SecurityException: Unable to find app for caller android.app.ApplicationThreadProxy。This log means that your app is having trouble handling a communication intent. Sometimes problems like this can be cause by sending an intent with big extras. Try to reduce the dimension of the image or, and this is the best way, save your image on the sd and put in the extras only the Uri of that image。
    • android.os.TransactionTooLargeException

    注意:不要在intent中传递大量的数据数据(例如List,大的图片等),否则会抛异常。

  8. drawable 中的selector文件 如果使用android:exitFadeDuration="@android:integer/config_shortAnimTime"这个属性,那么不同的手机可能会有不同的效果,慎用!!

  9. 在实现WebView与JS交互的过程中,如果遇到点击后JS方法无响应,应该注意一下问题:(1)WebView.addJavascriptInterface(new AndroidClick(), "android");这个方法的别名android是否与JS中的对象名称一致如 (2)WebView需要实现注册这个回调函数。

  10. WebView.setWebChromeClient(new WebChromeClient(){
    @Override
    public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
    return super.onJsAlert(view, url, message, result);
    }
    });

    (3)如果发布的APP有进行混淆,那么AndroidClick这个JS 与 JAVA交互的类需要proguard.cfg文件忽略这个类的混淆,否则混淆后JS将执行不了。

    keepclassmembers class net.angrycode.js2java.AndroidClick{
    *;
    }
     
  11. TextView实现简单的图文,可以使用TextView的drawableTop等属性来设置文本上的图片;还可以配合ImageSpan使用来设置图片。

  12. AlertDialog 按确定按钮不消失的方法

AlertDialog dialog = builder.create();
dialog.setCanceledOnTouchOutside(true);
dialog.show(); dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(v -> {
String text = editText.getText().toString().trim();
if (TextUtils.isEmpty(text)){
ToastUtils.showToast(this,R.string.say_something);
return;
}
//这里执行对话框消失
dialog.dismiss();
});

微信关注我们,可以获取更多

Android老司机搬砖小技巧的更多相关文章

  1. 开发Android应用 提升性能的小技巧

    前 言 2015年,Android OS 目前在手机操作系统的市场占有率已达59%,权威机构预计,Android市场占有率在2016年将达到63%,由于Android的开放性,未来占有率还将不断增加, ...

  2. Android Snackbar使用方法及小技巧-design

    Snackbar和Toast相似,都是为了给用户提供交互信息,Snackbar是固定在底部的,显示时从下往上滑出 要使用Snackbar,需要在项目的build.gradle中添加依赖 depende ...

  3. 如何进入百度、阿里,一个6年Android老司机的面经

    花絮 也许会有人感叹某些人的运气比较好,但是他们不曾知道对方吃过多少苦,受过多少委屈.某些时候就是需要我们用心去发现突破点,然后顺势而上,抓住机遇,那么你将会走向另外一条大道,成就另外一个全新的自我. ...

  4. android 操作sqlite的一点小技巧

    1.android 在sqlite插入数据时,是非常耗时的操作,原因是sqlite缺省会为每个插入操作开启一个事务,当数量变多的时候,自然时间就变得很慢,这时候可以考虑在插入等操作时先开启一个事务,再 ...

  5. Android Studio之build.gradle小技巧

    一: 当你工程引用android 的support包的时候,常常会这样写: dependencies { compile 'com.android.support:recyclerview-v7:22 ...

  6. 【Android应用开发】分享一个录制 Android 屏幕 gif 格式的小技巧

    因为写博客总是需要录制 Android 软件的演示效果, 研究了将近一小时找到了合适的工具; 录制流程 : -- 1. 录制 Android 手机屏幕内容 : 使用 拍大师 软件录制 Android ...

  7. Android代码的几点小技巧

     1)View的状态保存与恢复dispatchRestoreInstanceStateonRestoreInstanceStateonSaveInstanceState 2)Service的前台服务使 ...

  8. Android简易实战教程--第二十二话《自定义组合控件模拟qq登录下拉框和其中的一些”小技巧”》

    转载此文章请注明出处:点击打开链接   http://blog.csdn.net/qq_32059827/article/details/52313516 首先,很荣幸此专栏能被CSDN推荐到主页.荣 ...

  9. [UOJ#132][BZOJ4200][luogu_P2304][NOI2015]小园丁与老司机

    [UOJ#132][BZOJ4200][luogu_P2304][NOI2015]小园丁与老司机 试题描述 小园丁 Mr. S 负责看管一片田野,田野可以看作一个二维平面.田野上有 \(n\) 棵许愿 ...

随机推荐

  1. 【带着canvas去流浪(12)】用Three.js制作简易的MARVEL片头动画(上)

    目录 一. 大作业说明 二.基本思路 三.视频纹理表面修复--UV映射 3.1 问题描述 3.2 纹理贴图的基本原理-UV映射 3.3 关键示例代码 四.小结 示例代码托管在:http://www.g ...

  2. 新手小白之学习python一飞冲天日志之—基本数据类型,条件控制语句

    python的历史 04年目前最流行的WEB框架Django诞生 python2:源码不统一,有重复的功能代码 python3:源码统一,没有重复的功能代码 python是一个什么编程语言 编译型:编 ...

  3. docker学习ppt

    保存下学习资料

  4. java - try catch finally 用法

    try { //执行的代码,其中可能有异常.一旦发现异常,则立即跳到catch执行.否则不会执行catch里面的内容 } catch { //除非try里面执行代码发生了异常,否则这里的代码不会执行 ...

  5. Appium+python自动化(二十五)- 那些让人抓耳挠腮、揪头发和掉头发的事 - 获取控件ID(超详解)

    简介 在前边的第二十二篇文章里,已经分享了通过获取控件的坐标点来获取点击事件的所需要的点击位置,那么还有没有其他方法来获取控件点击事件所需要的点击位置呢?答案是:Yes!因为在不同的大小屏幕的手机上获 ...

  6. ubuntu/deepin 下下载wxpython

    1 输入apt-cache search wxpython 如果有返回信息 则输入 sudo apt-get install python-tools 2 否则 1.添加软件源地址到apt列表中.输入 ...

  7. kubernetes离线包分析

    k8s离线包解析 产品地址 鸣谢 大家好,首先感谢大家对我们产品的支持,特别是一些老客户的持续支持,让我可以有动力把这个事情持续进行下去. 感谢大家对付费产品的认可,尊重付费 产品介绍 我们专注于k8 ...

  8. 【Java例题】2.8 解一元二次方程

    8.解一元二次方程. 输入一元二次方程的a,b,c三个系数,解一元二次方程 ax^2+bx+c=0,输出两个根 package study; import java.util.Scanner; pub ...

  9. Java中的时间二三事

    实习过程中对于时间的处理有很多,有的还涉及到从数据库取出时间,所以做一些总结,想到那先写到哪,慢慢补充.    首先最常见的是java.util中的Date类,这个类封装了当前的日期和时间,它实际是计 ...

  10. 干货 |《从Lucene到Elasticsearch全文检索实战》拆解实践

    1.题记 2018年3月初,萌生了一个想法:对Elasticsearch相关的技术书籍做拆解阅读,该想法源自非计算机领域红火已久的[樊登读书会].得到的每天听本书.XX拆书帮等. 目前市面上Elast ...