作为一名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. Python多进程与多线程编程及GIL详解

    介绍如何使用python的multiprocess和threading模块进行多线程和多进程编程. Python的多进程编程与multiprocess模块 python的多进程编程主要依靠multip ...

  2. 关于下载安装Photoshop CS6遇到的一些问题

    关于安装Photoshop CS6顺带安装AdobeBridge CS6和Aobe Extension Manager CS6的问题 Bridge是PS的一款插件,它能兼容大多数AODBE公司的软件, ...

  3. [原创]wireshark&xterm安装、配置和使用

    --wireshark && xterm--一.安装wireshark: #apt-get install wireshark二.启动wireshark: #wireshark 或者 ...

  4. 倍增求LCA学习笔记(洛谷 P3379 【模板】最近公共祖先(LCA))

    倍增求\(LCA\) 倍增基础 从字面意思理解,倍增就是"成倍增长". 一般地,此处的增长并非线性地翻倍,而是在预处理时处理长度为\(2^n(n\in \mathbb{N}^+)\ ...

  5. KafKa 发消息到Storm

    通过kafka客户端发送数据,由KafkaSpout进行接收消息,传输到ConsumerBolt进行实时数据处理. maven依赖 <dependencies> <!-- https ...

  6. 关于RedirectAttributes 重定向带参数请求问题

    @RequestMapping("/delete") public String delete(String id, RedirectAttributes redirectAttr ...

  7. SpringBoot2.1.6 + Shiro1.4.1 + Thymeleaf + Jpa整合练习

    首先,添加maven依赖,完整的pom文件如下: <?xml version="1.0" encoding="UTF-8"?> <projec ...

  8. Uploadify.js引用导致浏览器宽度计算错误,布局混乱

    首先,本人新手,高手勿喷,请忽略.谢谢. 今天在写代码的时候遇到一个奇葩问题,我再在页面加载完成以后,动态计算DIV宽度,将整个层铺满浏览器.一切正常.单当我引入jquery.uploadify.js ...

  9. centOS7启动apache,报错Caused by: java.net.UnknownHostException: wshCentOS:

    测试方法: ping 127.0.0.1 ping localhost 解决方案: vi /etc/hosts 把127.0.0.1和wshCentOS绑定就好 按 i 进入修改模式,按 esc 退出 ...

  10. Linux中tree无法正常显示中文的解决方法

    tree命令以树状图列出目录的内容. 命令 tree -L n 的时候往往是无法正常显示中文的 先开始我以为是tree命令对中文是不支持的,后来百度了一下,网上有几个解决办法 安装新的tree可以解决 ...