Android
文章平均质量分 51
LVXIANGAN
这个作者很懒,什么都没留下…
展开
-
Android之快速打印代码
在Android Studio直接输入1、输入sout,自动出现提示,1、输入logt,设置静态常量TAG2、输入logd / logv / logi / loge / logw,打印不同级别日志3、输入logm,打印方法名和参数4、输入logr,打印方法的返回值...原创 2021-11-14 12:46:39 · 2255 阅读 · 0 评论 -
单例模式与synchronized
不同应用间通讯方式有很多种,文件共享、广播(BroadcastReceiver)、Sokect、AIDL(Binder)、ContentProvider等,下面介绍下跨进程使用https://www.cnblogs.com/lizhengxian/p/5075635.htmlhttps://www.jianshu.com/p/e8913d42181bhttps://blog.csdn.net/qq_35114086/article/details/53319107https://blo.原创 2021-11-04 22:01:04 · 590 阅读 · 0 评论 -
Android性能分析工具Profile学习
1、dump the java heap 是什么意思?dump:在计算机领域,dump一般译作“转储”。即使翻译的很贴切,但还是很难从字面上完全理解dump的真正含义。作为动词:一般指将数据导出、转存成文件或静态形式。比如可以理解成:把内存某一时刻的内容,dump(转存,导出,保存)成文件。...原创 2021-06-14 22:20:34 · 2418 阅读 · 4 评论 -
Android之拷贝文件夹到sdcard路径下
项目中遇到需求:需要预置文件夹到sdcard路径下,sdcard路径是开机启动时才进行挂载,所以没有办法在ROM制作的时候进行拷贝。解决方案:1、将需要存放到sdcard路径下的文件夹打包成zip文件2、放到apk的assets路径下3、apk加载后,把assets路径的zip文件,拷贝到sdcard路径,然后再进行解压。应用共有三个类:1.MainActivity.java2.CopyIntentService.java3.ZipUtils.java下面就介..转载 2021-04-29 10:57:59 · 1352 阅读 · 0 评论 -
Android之apk静默安装后重新启动APP的方法
一:需求简介 运行在广告机上的app,需要完成自动升级的功能,广告机是非触摸屏的,不能通过手动点击,所以app必须做到自动下载,自动安装升级,并且安装完成后,app还要继续运行,最好不借助其它app来实现以上功能。二:实现思路 实现这个功能第一个想到的方法就是静默安装,由于广告机已经root,静默安装比较顺利,安装app的主要代码如下:/* @pararm apkPath 等待安装的app全路径,如:/sdcard/app/app.apk**/private static ..转载 2021-02-20 14:34:31 · 2833 阅读 · 3 评论 -
Android之apk安装、启动流程
Android的安装和启动比较特别,很多机制和直观感受并不一样,如果这里出现误解,就很难透彻理解App的运行,这里把过去积累的问题统一梳理了一下。安装我们知道,Android的安装包Apk其实就是个资源和组件的容器压缩包,安装的过程主要是复制和解析的过程,这个过程大概分这样几步:一、复制安卓的程序目录是/data/app/,所以安装的第一步就是把apk文件复制到这个目录下。这里有四个问题:安卓机有内部存储和SD卡两部分,很多安卓机的内存并不大,需要把apk安装到SD卡上节省内存空间,所以转载 2021-02-19 16:51:24 · 7925 阅读 · 2 评论 -
Android之你真的了解adb install 和 adb push区别吗?
adb push 和 adb install 的区别:adb push 能够指定安装目录。比如执行"adb push xxx.apk system/app" 后,xxx.apk被安装到了system/app目录下,此目录下的软件为上文中提到的system application。 adb install 用此命令安装的软件位于data/app 目录,则为user ...原创 2021-01-10 18:19:22 · 2704 阅读 · 0 评论 -
Android之代码实现adb shell命令
查看Activity的任务栈:我们通常这样使用:adb shell dumpsys activity activities (常见adb命令),这里有个问题:adb 命令虽然强大,但在Android代码如何实现adb命令调用呢?答案是:Runtime.getRuntime.exec("dumpsys activity activities")示例1、input tap x y 模拟点击 屏幕,生成 down-up事件 ,例如 input tap 300 400; 这个是 像素值...原创 2020-12-10 23:42:05 · 2560 阅读 · 0 评论 -
Android之如何进行日志分析
一直以来,我们对日志分析,往往基于Andorid Studio的Logcat日志输出,虽然使用Logcat 工具栏是我们最重要的分析手段之一,但它有很大的局限性,那就是必须真机连接电脑,而且Logcat输出是有大小限制的。对于一些离线设备,如果要通过连接Logcat去作日志分析,这往往会非常不现实。以Android系统的车载主机为例,面对市场用户对软件问题投诉,我们需要对离线日志进行分析,通常做法是主机把日志输出写入存储设备,通过暗门开关取出日志分析。然而拿到的日志往往是这样的:随.原创 2020-10-24 10:28:48 · 2256 阅读 · 2 评论 -
Android之ContentValue分析
ContentValues是一个基于HashMap封装的类,常用于ContentProvider相关开发中,它与HashMap主要区别在于:前者只能存储基本类型的数据,等同于HashMap<String,基本数据类型>源码:具体用法:public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceStat.原创 2020-09-14 22:01:00 · 1020 阅读 · 0 评论 -
Android Studio之dependencies使用+号注意事项
导入项目工程代码时,在编译代码时总会遇到类似错误:Could not resolve com.android.support:appcompat-v7:28.0.0-alpha3 之类的提示,这个错误通常是gradle 配置dependencies依赖库版本不支持导致。因为不知道要配置什么版本号,总喜欢直接填了一个 + 号,如图:当配置版本号为 + 时,每次编译代码时会去代码仓库拉取最新版本。例如:本地版本是1.3.0,最新发布了1.3.5版本,当重新编译时,系统会自动去maven仓库更新到1.3.原创 2020-09-14 21:43:19 · 839 阅读 · 0 评论 -
Android之使用adb命令检查网络连接
收到测试反馈:“你负责的Android应用无法访问网络,但其他app功能能够正常访问网络,请检查代码有没有问题”背景:在自定义Android主机系统中,内置TBOX(实际是内置了一个sim卡移动网络)① ping目标主机的域名和IP(ping会自动将域名转换为IP) ② 不带包头的包大小和带包头的包大小(参考“-s”参数) ③ icmp_seq:ping序列,从1开始; ttl:剩余的ttl; time: 响应时间,数值越小,联通速度越快; ④ 发出去的包数,返回的包数,.原创 2020-09-08 22:47:22 · 11642 阅读 · 0 评论 -
Android之四大组件与Context关系
原创 2020-09-08 10:47:33 · 408 阅读 · 0 评论 -
Android之隐藏但不销毁Activity
要实现Activity显示完成后隐藏不销毁,实现思路方法很简单:保证为单例对象 设置为隐藏不可见保证为单例对象:可在AndroidManifest.xml 中配置activity 参数为 android:launchMode="singleInstance"设置隐藏不可见:方法1:设置透明度WindowManager.LayoutParams lp = getWindow().getAttributes();lp.alpha = 0f;getWindow().setAttribu..原创 2020-09-08 09:56:57 · 3132 阅读 · 0 评论 -
内存抖动、内存泄露、内存溢出
内存抖动:在短时间内有大量对象被创建或者被回收的现象,主要原因是频繁在循环里创建对象。 在程序里,每创建一个对象,就会有一块内存分配给它;每分配一块内存,程序的可用内存也就少一块;当程序被占用的内存达到一定临界程度,GC 也就是垃圾回收器(Garbage Collector)就会出动,来释放掉一部分不再被使用的内存。Android 里的 View.onDraw() 方法在每次需要重绘的时候都会被调用,这就意味着,如果你在 onDraw() 里写了创建对象的代码,在界面频繁刷新的时候,你就也会频繁创建出一大原创 2020-09-06 16:25:34 · 736 阅读 · 0 评论 -
Android之巧用adb命令
我们在使用adb命令对设备进行截屏、录像等操作时,可以配合使用批处理命令。1、一键截屏adb shell /system/bin/screencap -p /sdcard/screen.pngadb pull /sdcard/screen.png C:/Users/lvxiangan/Desktop/"%date:~0,4%-%date:~5,2%-%date:~8,2% %time:~0,2%-%time:~3,2%-%time:~6,2%.png"把上述代码保存到文本,重命名:一键截图原创 2020-08-28 14:14:55 · 265 阅读 · 0 评论 -
AndroidStudio之Git提交代码出现author ‘xxx‘ is not ‘Name ‘ and matches no existing author 的解决方法
Android Studio通过VCS提交代码时,收到Commit failed with error,author 'xxx' is not 'Name ' and matches no existing author 如下图:错误原因:Author字段用户名填写错误导致。常见错误如下:随便填写了一个名字,但没有邮箱地址解决方式:调整Author填写内容格式:用户名<lvxiangan@163.com>用户名可自定义,邮箱地址为Git账号邮箱,必须用尖括号包围...原创 2020-08-28 11:45:27 · 6002 阅读 · 1 评论 -
Android之音频开发基础入门
采集音频是模拟信号转化为数字信号的过程。关于Android采集音频的过程,我们需要了解几个概念:1.采样率采样是把模拟信号转化为数字信号的过程。图上的纵向直线间隔越密集,表明采样率就越高,采样率越高,音频的音质就越高。目前Android手机中,44100kHZ可以兼容全部手机的采样率。2.量化精度(位宽)上图中,箭头点为采样点。每个采样点都需要用一个数值表示大小,这个数值的类型可以是4bit,8bit,16bit,32bit等。位数越多,表示越精细,声音质量就越好,而数据量也会成转载 2020-07-12 23:12:22 · 1012 阅读 · 0 评论 -
Android之查找apk包名和启动入口类
最近拿到一台用户主界面深度定制过的Android设备:没有返回键、找不到程序列表、主界面按钮只对应着指定的app,通过adb install 命令安装apk后,没有界面可直接运行。...原创 2020-03-06 00:11:19 · 10774 阅读 · 0 评论 -
Linux之chmod文件权限介绍
使用adb命令,执行文件报错:cant execute: Permission denied使用chmod 777 文件名 即可修复该问题。那么这个777是什么意思呢?"777" 3位数,分别依次对应着Linux系统的3种用户角色:文件所有者、群组用户、其他用户。每一个角色,对文件或目录的权限又分为3种:只读、只写、可执行。依照上面的表格,权限组合就是对应权限值求和,如下...原创 2020-02-27 19:48:01 · 474 阅读 · 0 评论 -
Android之判断手机是否有root权限
什么是Root权限?当你买了一台Android 手机回来的时候,并不意味着你拥有了对这台手机的绝对支配权,因为当你想要删除系统自带的软件,却无能为力。原因很简单:手机厂商处于自身利益,绑定了一些软件,不允许我们删除;有一些手机依赖的软件,不能随意删除。Android手机只有两种账户类型:一种是普通账户,另一个是超级管理员。手机默认开机进入的就是普通用户对应的界面,如果要进入超级管理员页面,...原创 2020-02-20 10:52:06 · 28814 阅读 · 2 评论 -
CPU性能指标之DMIPS、MIPS
MIPS,DMIPS和MFLOPS是常用的CPU性能评估标准。MIPS: 每秒执行了多少百万条指令。全称:Million Instructions executed Per Second DMIPS:D是Dhrystone的缩写,在MIPS 前面加上 Dhrystone (整数运算),用于测整数计算能力。 注意:Dhrystone,它是一个专有名词,一个简短的综合基准程序,有ADA、...原创 2020-02-14 22:55:52 · 23604 阅读 · 1 评论 -
什么是手机的工程模式
什么是手机工程模式? 工程模式,顾名思义,工程师用来给手机调试的模式。看似深不可测,其实也没有大家想象的那么复杂,我们可以在里面获取一些基站信息,比如信号强度、电池状态、手机运行时间、后台软件运行时间,当然也可以调试WLAN。 手机怎么进工程模式?1、在拨号盘输入 *#*#4636#*#*后可直接进入工程调试界面; 注意:不同手机输入不一样,如: 华为...转载 2020-01-21 10:31:53 · 3030 阅读 · 0 评论 -
Android之debug运行调试发现有多个设备
最近在运行Android工程时,明明只连接了一台设备,但弹出的列表却提示存在多台可运行设备:为什么会无端端多了三个设备呢?设备名称是 ip + port 方式组成的。选前面三个中任意一个去运行,提示adb需要重启,按照restart 操作后依旧重复提示上述内容。换了台电脑测试,并没有发现这个问题。在经历过重启adb、重启设备、重启电脑无果后,考虑到有可能是SDK 版本过新导致的,于是...原创 2020-01-01 00:08:38 · 498 阅读 · 0 评论 -
Android之adb常用命令
什么是adb?缩写:android debug bridge,是Android SDK提供的一个程序,路径:\SDK\platform-tools\adb.exe, 配置:把adb 路径添加进系统环境变量path里面,例:D:\sdk\platform-tools; 这样在cmd 窗口就能响应adb命令,不用每次都进入adb目录。 什么是shell?Shell俗称壳(用来区别于核 ...原创 2014-01-21 18:21:54 · 1195 阅读 · 0 评论 -
Android Studio报错之error module not specified 和 error please select android sdk
运行Android 工程代码时,经常会看到以下图标,按编译错误提示:error module not specified我们先指定运行的主module,步骤如下:但在正确选择module后,依旧报错:error:please select android sdk解决方法如下:解决方法:版本必须与app模块的 build.gradle 文件里的 ...原创 2019-12-08 09:38:08 · 1483 阅读 · 0 评论 -
Android之AIDL跨进程抛异常的原理
总结:1、跨进程通讯中,从一端到另外一端,只支持传递以下9种异常:SecurityException BadParcelableException IllegalArgumentException NullPointerException IllegalStateException NetworkOnMainThreadException UnsupportedOperatio...转载 2019-12-08 00:03:50 · 5621 阅读 · 0 评论 -
Android之setSystemUiVisibility总结
关于沉浸式体验模式,我们通常会在Activity,使用decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_XXXXX) 来设置,具体示例可以看这篇文章。View 各种SYSTEM_UI_FLAG的总结View.SYSTEM_UI_FLAG_IMMERSIVE使状态栏和导航栏真正的进入沉浸模式,即全屏模式,如果没有设置这个...原创 2019-12-07 16:14:38 · 1906 阅读 · 0 评论 -
Android安全之intent隐式意图攻击
该漏洞涉及到app所使用的intent和intent filter。 intent是一个可用于从一个app组件请求动作或处理事件的“消息对象”。Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。 intent主要包括隐式意图和显式意...转载 2019-11-10 11:37:11 · 2121 阅读 · 0 评论 -
Android之设置线程优先级的两种方法Thread.setPriority和Process.setThreadPriority
在Android开发过程中,通常会涉及使用线程实现异步任务,而不同任务有不同权重,这就需要我们为不同的线程设置优先级。Android提供了两种方法,让我们可以实现线程优先级设置。我们无法控制进程,但是可以控制进程中的线程的优先级。两种方法Thread.setPriority(Thread.XXXXX_PRIORITY); android.os.Process.setThreadPri...原创 2019-11-10 09:42:06 · 10578 阅读 · 0 评论 -
Android之提高Service优先级总结及android:persistent的使用
关于Service保活,提高Andorid 应用中Service 组件优先级的方法,总结起来,大概有这些方法:在AndroidManifest.xml文件中对于intent-filter可以通过android:priority = “1000”这个属性设置最高优先级,1000是最高值,如果数字越小则优先级越低,同时实用于广播。 在onStartCommand里面调用 startForegro...原创 2019-11-09 22:22:13 · 4459 阅读 · 0 评论 -
Android Studio 无法全局搜索find in path 问题解决
Andorid Studio 工具用久了,会在内部产生很多临时文件,之前全局搜索功能好好的,结果越来越慢,最后甚至罢工了。解决方法:Android Studio -----File ----- Invalidate caches / restart,在弹出框中选择“invalidate andrestart ” 即可...原创 2019-11-08 20:32:43 · 3478 阅读 · 1 评论 -
Android之static静态变量生命周期
静态变量引用与内存回收、内存泄露这些问题有关,有必要加深研究和理解。一、静态变量在类被加载的时候分配内存。 类在什么时候被加载?当我们启动一个app的时候,系统会创建一个进程,此进程会加载一个DVM实例,然后代码就运行在DVM之上,类的加载和卸载、垃圾回收等事情都由DVM负责。也就是说进程启动的时候,类被加载,静态变量被分配内存。二、静态变量在类被卸载的时候...转载 2019-11-09 22:03:38 · 543 阅读 · 0 评论 -
Java之transient关键字有什么用
在LinkedHashMap 类中,看到有个关键字transient,它是什么意思呢?下面援引百度百科解释:Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。当一个对...原创 2019-10-24 21:07:00 · 467 阅读 · 0 评论 -
Android之音频开发基础
相信不少人在音频采集处理的时候,会遇到这样的设置界面,那采样率、比特率、通道这样的术语,代表的是什么意思呢?图11、基本常识频率的单位是HZ,中文为赫兹,是电,磁,声波和机械振动每秒的周期次数(周期/秒)。 人类的耳朵能听到的声音频率范围为20Hz~20000Hz,如果低于这个范围的话就叫做次声波,而若是高于这个范围的则是叫做超声波。无论次声波和超声波,耳朵都觉察不到 人...原创 2019-10-20 10:38:58 · 700 阅读 · 0 评论 -
用webview访问网站,当时老是出现“找不到网页,网页可能暂时出现故障”
用webview访问网站,当时老是出现"找不到网页,http://www.xxxxx.com/?xxxxxxxx处的网页可能暂时出现故障,也可能已经永久移至某个新的网络地址。以下是几点建议: 进行检查以确保您的设备具有信号和数据连接。 稍后重新载入该网页。原因:配置文件没加权限。解决方法:在AndroidManifest.xml中必须使用许可"a原创 2012-03-26 11:16:17 · 19624 阅读 · 3 评论 -
android监听返回按钮事件
用户在点击手机的返回按钮时,默认是推出当前的activty,但是有时用户不小心按到返回,所以需要给用户一个提示,这就需要重写onkeydown事件,实现的效果如下:@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);原创 2012-03-30 10:15:38 · 1664 阅读 · 0 评论 -
android监听返回按钮事件
用户在点击手机的返回按钮时,默认是推出当前的activty,但是有时用户不小心按到返回,所以需要给用户一个提示,这就需要重写onkeydown事件,实现的效果如下:@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);原创 2012-03-16 10:47:32 · 975 阅读 · 0 评论 -
OAuth认证过程中用WebView代替原来的系统自带浏览器
前面的文章的OAuth认证过程在获取oauth_verifier码是是通过调用android系统带的浏览器进行用户授权认证的, 具体见:android开发我的新浪微博客户端-用户授权页面功能篇(3.2)。 当初的实现是这样: 1、首先在AndroidManifest.xml中配置给AuthorizeActivity添加如下配置 ,这样在浏览器中通过地址myapp://Aut原创 2012-04-05 12:13:17 · 2060 阅读 · 0 评论 -
Andorid之Activity生命周期状态
Activity的生命周期oncreate()->onstart()->onResume()->onRestart()->onPouse()->onStop()->onDestory()Activity生命周期: 一个activity主要有三个状态: ·当在屏幕前台时(位于当前任务堆栈的顶部),它是活...原创 2012-04-06 14:07:50 · 1023 阅读 · 0 评论