android常见问题
文章平均质量分 91
LoveWyf_
本人学识渊博 经验丰富,代码风骚、效率恐怖,c/c++、java、php无不精通,熟练掌握各种框架,深山苦练20余年,一天只睡4小时,千里之外定位问题,瞬息之间修复上线。可连续编程100小时不休息!学校不支持编程已辍学,家人不支持编程已断绝关系,老婆不支持编程已离婚!
展开
-
关于Listview、Girdview的setSelection无效的解决方法与解析
我的解决方法就是,将setSelection放到handler的post方法中,这样就解决了这个问题。 new Handler().post(new Runnable() { @Override public void run() { listView.setSelection(position); } });至于原原创 2016-07-29 10:02:58 · 1508 阅读 · 0 评论 -
android 模拟器INSTALL_FAILED-NO_MATCHING_ABIS:Failed to extract native libraries,res=-113
一般在android模拟器上运行的时候会遇到这个问题,解决方法1、增加缺少的so文件 如果是缺少x86的so文件,则把x86的so文件加入即可,其他也一样。2、使用arm架构的模拟器 在创建模拟器的时候使用arm的cpu架构3、在app的gralde中加入android { ... defaultConfig { ...原创 2017-12-09 13:56:39 · 704 阅读 · 0 评论 -
android 本地切割文件
public static void splitFile(String path, int length, ListFile> list) throws IOException{ InputStream is = new FileInputStream(path); int len=0; byte[] buff = new byte[length]; int i =原创 2017-12-21 16:02:10 · 924 阅读 · 0 评论 -
android 使用mediaplayer播放视频的时候设置请求头header
很简单,使用如下代码就行 Uri uri = Uri.parse("http://47.96.22.18:8002/test.pg1"); Map headers = new HashMap<>(); headers.put("sencoder", "hevc"); Map headers = new HashMap(); headers.put("U原创 2018-01-18 13:14:44 · 5677 阅读 · 0 评论 -
ARouter there's no route matched解决方法
原因ARouter是一个组件化开发常用的一个路由框架,它可以很方便的让我们进行组件之间的跳转。但是随着module的增多我们很容易出现there’s no route matched的错误,出现这种问题会让我们在开发的时候很麻烦,却又没有报错的日志让我们查看。 在百度了很多之后发现网上的方法都不能解决我的问题,于是通过简单的源码阅读,找到了问题所在。#分析Aouter的具体使用便不再...原创 2018-06-11 14:40:02 · 30311 阅读 · 7 评论 -
判断textview是否变成两行
TextView tv2 = (TextView) findViewById(R.id.tv2); ViewTreeObserver vto2 = tv1.getViewTreeObserver(); vto2.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { ...原创 2018-07-18 15:07:30 · 2734 阅读 · 0 评论 -
android studio 3.1.2以上查看app的控件布局
使用uiautomatorviewer即可。 路径是/Users/xiaoqi/Library/Android/sdk/tools/bin/uiautomatorviewer原创 2018-09-05 16:35:53 · 5858 阅读 · 0 评论 -
无需自定义View,彻底放弃shape,selector吧
前言作为一个android程序员,对于shape、selector这两个标签一定不陌生。每当UI设计师给我们设计出一个个button背景的时候,我们就需要去drawable文件夹下去新建一个bg_xxx.xml,然后很多时候区别仅仅是一个边框的颜色或者填充的颜色。这就导致了很多非常相似的.xml文件产生。 网上之前也有了一种通过自定义View,在xml中通过设置属性达到shape效果...原创 2018-09-11 00:28:13 · 1493 阅读 · 2 评论 -
IdleHandler优化Activity启动时间
IdleHandler是主线程在开始加载页面完成后调用的方法,可以提高性能:@Override protected void onResume() { super.onResume(); Looper.myQueue().addIdleHandler(() -> { initializeData(); return false; ...原创 2018-11-14 10:59:28 · 1137 阅读 · 0 评论 -
安卓apk一键反编译工具
安卓apk反编译工具,一键反编译AndroidMainfest.xml layout res等资源以及class文件使用效果使用方法1:复制apk文件到android-apk-decompile所在目录 2:windows:直接把apk文件拖入bat即可 mac:执行shell脚本 sh /Users/xxxx/android-apk-decompile/decompile.s...原创 2018-11-21 14:09:08 · 3027 阅读 · 0 评论 -
android权限判断时shouldShowRequestPermissionRationale的使用
shouldShowRequestPermissionRationale用于处理用户勾选下次不再询问的权限情况:如果用户在过去拒绝了权限请求,并在权限请求系统对话框中选择了 Don’t ask again 选项,此方法将返回 false。如果设备规范禁止应用具有该权限,此方法也会返回 false操作结果第一次打开App时false勾选“下次不在询问”true...原创 2018-11-23 14:50:46 · 901 阅读 · 0 评论 -
android checkSelfPermission方法使用注意
当编译targetSDKVersion < 23时使用ContextCompat.checkSelfPermission and Context.checkSelfPermission将会不起作用原创 2017-09-20 11:37:57 · 25084 阅读 · 2 评论 -
Android跳转到系统通讯录新增和修改联系人
新增联系人:Intent intent = new Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI);intent.putExtra(android.provider.ContactsContract.Intents.Insert.NAME, name);intent.putExtra(android原创 2017-06-20 11:36:35 · 3417 阅读 · 0 评论 -
Android 图片压缩,Bitmap优化
Bitmap是导致OOM的一个最重要的问题。通常我们会对图片进行压缩来避免OOM。下面总结了几种对图片进行压缩的方法。对图片进行压缩,无外乎两种方法:对图片质量进行压缩、对图片尺寸进行压缩。我在网上看了许多博客,那些所谓的高质量压缩无非就是用了这两种方法。我们要根据情况,合理的选择方法,才能达到最好的效果。对图片质量的压缩,是对图片file大小的压缩,这可以保证图片占空间大小改变,但是这种原创 2016-08-15 17:25:18 · 1161 阅读 · 0 评论 -
Android获取View的宽度和高度
onCreateonStartonResume都不能直接获得View的宽度高度,因为View的绘制并不是和Activity的生命周期同步进行的。解决方法:1、onWindowFocusChanged当Activity失去获得焦点的时候,说明View已经绘制完了,因此可以获得宽度高度。e.g.public void onWindowFocusChanged(boole原创 2016-08-16 00:03:12 · 1007 阅读 · 0 评论 -
Android 获取app应用大小、手机内存信息、删除文件方法、获得文件大小
因为最近在做清理缓存的功能所以需要用到这些方法,下面就直接贴出代码了。获取手机信息: /** * 获取手机内部剩余存储空间 * * @return */ public static long getAvailableInternalMemorySize() { File path = Environment.getDataDirectory(); StatFs原创 2016-08-30 17:52:25 · 3115 阅读 · 1 评论 -
Android获取软键盘的高度
最近由于要实现一个类似微信朋友圈的功能,但是评论框位置总是不能精确的定位,因此只能自己计算坐标来手动调用scrollBy来滚动。在研究过程中遇到一个问题便是不能获取软键盘高度。研究了网上很多方法,但是不能成功,无意中找到了解决方法。首先先给出如何获取键盘高度的方法: interface IKeyBoardVisibleListener{ void onSoftKeyBoardVis原创 2016-08-10 16:22:08 · 18773 阅读 · 0 评论 -
Android中的SystemClock类
一、声明:public final class SystemClock extends Object 是一个不可变类。二、结构:java.lang.Object?android.os.SystemClock三、概述: 它是一个核心的技术设备。三种不同的时钟是可用的,他们不应该混淆:1、System.currentTimeMillis()是转载 2016-10-09 09:09:44 · 542 阅读 · 0 评论 -
对Android进程守护、闹钟后台被杀死的研究
最近公司要求要做一个提醒功能,一说到提醒,那肯定就和闹钟差不多的意思,那么肯定就要用到AlarmManager。但是,我们知道,android系统很坑爹,不同的厂商对rom的定制,导致对进程的管理都不太相同,但是如何做到在各个手机上都能一直保持后台执行呢?。为了解决这个问题,特地去研究了各种保持进程不被杀死的方法。下面对几种常见的用法进行了分析,并且给出了我自己发现的一个保持进程运行的原创 2016-10-11 20:20:42 · 18398 阅读 · 18 评论 -
解决微信分享SDK,混淆报错Can't process class [com/tencent/wxop/stat/al.class]
今天在加入GreenDao包的时候,导致项目出现了方法数超过65535的问题,因此加入了android.support.multidex加入了multedex包后导致了微信的分享sdk出了以下错误Error:Execution failed for task ':app:proguardRelease'.> java.io.IOException: Can't read [D:\android_s原创 2016-10-12 17:36:48 · 4185 阅读 · 1 评论 -
SQLite并发操作下的分析与处理,解决database is locked,以及多线程下执行事务等问题
最近公司的项目处于重构阶段,观察后台crash log的时候发现了一个发生很多的问题:android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5): , while compiling: PRAGMA journal_mode看了一下报错具体位置:嗯,很简单,那就改成同步。原创 2016-09-02 19:45:30 · 34251 阅读 · 4 评论 -
Android Studio中Dex分包方案
现在热修复、插件化是一个比较流行的趋势。qq空间的超级补丁方案、微信的Tinker前提都是需要分包。网上找了很多资料,大多都是eclipse中的分包方法。查看dex方法数的一个网址:http://inloop.github.io/apk-method-count/下面给出AS中的一个分包方法。首先gradle的配置: defaultConfig { 。。。。。 ...原创 2016-10-20 10:00:40 · 7701 阅读 · 3 评论 -
Android获取手机cpu架构,支持的指令集
代码如下:String[] abis = new String[]{}; if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP) { abis = Build.SUPPORTED_ABIS; } else { abis = new String原创 2016-12-26 11:20:30 · 10518 阅读 · 0 评论 -
判断Android 当前版本是否为debug版本
private static boolean isDebugVersion(Context context) { try { ApplicationInfo info = context.getApplicationInfo(); return (info.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0; } catc原创 2017-04-11 14:45:24 · 3985 阅读 · 0 评论 -
java kotlin解析2018-12-28T09:17:30.875+0000这种类型的时间
fun praseTime(time: String): String { val df = SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSZ", Locale.CHINA) val result: Date result = df.parse(time) val sdf = SimpleDateFormat("yyyy-MM...原创 2019-01-16 10:46:40 · 513 阅读 · 0 评论