
安卓基础
文章平均质量分 89
ok406lhq
哦jio撒嘛
展开
-
Android应用开发之统计App时长
闲谈好久没更新了,前两个月就定了标题,现在才开始动手写。其实之前觉得这种获取App累积时长的方法(以下内容会介绍到)不唯一,可能有很多种,所以想收集多点资料,后来看到腾讯和360都是这么实现的,那么现在就开始介绍一下这个需求。相信做游戏sdk开发的最近经常有这个需求,为什么是游戏sdk开发需要?而且为什么是最近?首先回答第一个问题,这个需求主要是要限制用户对于app的使用时长,一般较为常见的是限制游戏游玩时长,其次,很少有Android应用有统计使用时长这一个需求。第二个问题,为什么是最近?没.原创 2020-07-08 18:40:12 · 4451 阅读 · 1 评论 -
Android全面检测设备是否模拟器
前言前段时间工作有个需求,要求检测App是否在模拟器环境下运行,就像在有些手机游戏上可以看到这个功能乍一看蛮简单的,后来我查了一下资料,然后头都大了······ 这多亏了国内pc端模拟器的发展,现在市面上的模拟器越来越多,也越来越“逼真”了,模拟器和真机的区别在逐步缩小,这就使得模拟器的检测存在偏差,不管有多小,偏差总是会存在的,如何降低这种偏差值,就是这篇文章像讨论的内容。先来看一下我...原创 2020-03-27 18:01:19 · 6722 阅读 · 1 评论 -
把Android logcat信息显示在你的手机
前言年前有个想法,过去后端调试接口的时候,需要对接网络请求的各个参数,每次要调试时的流程都是(对于Android客户端的我来说):打开Android Studio → 连接设备或模拟器 → 开启logcat → 日志筛选 …这样确实有点麻烦,有没有一种方式把网络请求和返回的日志全部打到Demo App里边显示?答案当然是有!上个demo图:由于涉及公司接口的安全性,这里就不把具体的...原创 2020-03-25 15:17:09 · 1516 阅读 · 0 评论 -
当你输入"apktool b -f [回编译文件] -o [输入的apk文件]"命令后
下面的记录是在我敲入以下命令后遇到的错误:(相信学习逆向的同学一定不会生疏:)apktool b -f E:\decode -o E:\Decompile.apk 回编译出现文件名或扩展名太长错误解决方案:减少apktool.yml文件中doNotCompress不加密的文件回编译出现“class not find brut.androidlib.meta.MetaInfo...原创 2019-11-22 11:36:15 · 2039 阅读 · 2 评论 -
做一个适配Android8.0以上版本的悬浮窗
突然有了个悬浮球的需求,赶忙去网上搜索了一下,发现大部分都是停留在几年前,为了适配Android 6.0版本甚至6.0以下实现的代码。跑了一遍之后出现了不少问题,首先第一个:android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity...原创 2019-10-22 15:28:07 · 3719 阅读 · 1 评论 -
安卓设计模式の外观模式
Android设计模式源码解析之外观模式(Facade)1. 模式介绍模式的定义外观模式(也成为门面模式)要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。它提供一个高层次的接口,使得子系统更易于使用。模式的使用场景在设计初期阶段,将不同的两个层分离;在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,大多数的模式使用时也都会产生很多很小的类,这本是好事,但也给外部调用它们的用原创 2017-12-05 10:36:41 · 766 阅读 · 0 评论 -
安卓设计模式の责任链模式
Android设计模式源码解析之责任链模式 1. 模式介绍模式的定义一个请求沿着一条“链”传递,直到该“链”上的某个处理者处理它为止。模式的使用场景一个请求可以被多个处理者处理或处理者未明确指定时。2. UML类图角色介绍Client:客户端Handler:抽象处理者ConcreteHandler:具体处理者3. 模式的简单实现简单实现的介绍责任链模式非常简单异常好理解,相信我它比单例模式还简单易懂原创 2017-12-05 10:30:00 · 658 阅读 · 0 评论 -
安卓设计模式の策略模式
Android设计模式源码解析之策略模式 1. 模式介绍模式的定义策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。注:针对同一类型操作,将复杂多样的处理方式分别开来,有选择的实现各自特有的操作。模式的使用场景针对同一类型问题的多种处理方式,仅仅是具体行为有差别时。需要安全的封装多种同一类型的操作时。出现同一抽象多个子类,原创 2017-12-05 10:27:35 · 646 阅读 · 0 评论 -
安卓设计模式の模板方法模式
Android设计模式源码解析之模板方法模式 1. 模式介绍模式的定义定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模式的使用场景多个子类有公有的方法,并且逻辑基本相同时。重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现。重构时,模板方法模式是一个经常使用的模式,把相同的代码抽取到父类中,原创 2017-12-05 10:16:42 · 639 阅读 · 0 评论 -
安卓设计模式の组合模式
1. 模式介绍模式的定义 组合模式(Composite Pattern)又叫作部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 GoF在《设计模式》一书中这样定义组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。使得用户对单个对象和组合对象的使用具有一致性。原创 2017-12-05 10:09:12 · 650 阅读 · 0 评论 -
安卓设计模式のAdapter模式
Android设计模式源码解析之适配器(Adapter)模式 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。原创 2017-12-03 10:30:21 · 1050 阅读 · 0 评论 -
公共技术点之面向对象六大原则
在工作初期,我们可能会经常会有这样的感觉,自己的代码接口设计混乱、代码耦合较为严重、一个类的代码过多等等,自己回头看的时候都觉得汗颜。再看那些知名的开源库,它们大多有着整洁的代码、清晰简单的接口、职责单一的类,这个时候我们通常会捶胸顿足而感叹:什么时候老夫才能写出这样的代码! 在做开发的这些年中,我渐渐的感觉到,其实国内的一些初、中级工程师写的东西不规范或者说不够清晰的原因是缺乏一些指导原则。转载 2017-12-05 10:41:02 · 725 阅读 · 0 评论 -
安卓设计模式の代理模式
Android设计模式源码解析之Proxy模式 Binder中的代理模式再说Binder中的代理模式之前,我们需要先看看代理模式的简单实现,这一部分内容采用了《JAVA与模式》之代理模式这篇文章中的代码示例和uml类图。1. 模式介绍代理模式是对象的结构模式。代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。模式的使用场景就是一个人或者机构代表另一个人或者机构采取行动。原创 2017-12-05 10:43:14 · 657 阅读 · 0 评论 -
安卓设计模式の装饰者模式
Android设计模式源码解析之装饰者模式1. 模式介绍模式的定义装饰模式也叫做包装模式,是结构型设计模式之一。目的是为了给一个类或对象增加行为。可以是继承的一种替代。 装饰模式也很好理解,比如一个人,给他装上火箭就能上天了,装上潜水服就能下海了,但本身还是个人,人没有任何变化。装饰者模式的的定义是动态地给一个对象添加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。原创 2017-12-05 11:16:44 · 653 阅读 · 0 评论 -
安卓设计模式の观察者模式
观察者模式是一种使用频率非常高的设计模式,最常用的地方就是订阅-发布系统。这个模式的重要作用就是将观察者和被观察者解耦,使他们之间的依赖更小甚至没有。定义定义对象一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于他的对象都会得到通知并被自动更新。模式的使用场景关联行为场景,这个关联是可拆分的。将观察者和被观察者封装在不同的对象中,可以各可以各自独立的变化。原创 2017-12-05 11:29:06 · 648 阅读 · 0 评论 -
Failed to push the item null解决方法
当我们在Android Studio中向Android Device Monitor中的文件夹中传入文件时,可能会报出这个错误:这是我向sdcard/emulated/0中传入文件时出现的错误,当然,你要先得打开该文件的目录结构。可能会出现点击文件夹展开不了子文件的情况,这时候,你就到adb.exe所在的目录,打开命令行,输入adb root即可刷新文件权限,这时候你就能看到子文件了。原创 2017-12-16 10:21:39 · 3693 阅读 · 0 评论 -
RecyclerView的使用技巧
RecyclerView简介从Android 5.0开始,谷歌公司推出了RecylerView控件,RecyclerView是support-v7包中的新组件,Google的官方文档中介绍的,RecyclerView用于在有限的窗口展现大量的数据。其实体现该作用的组件已经有了ListView、GridView,那么为什么还要有RecyclerView?下面就会做介绍啦~原创 2017-12-27 19:30:44 · 725 阅读 · 0 评论 -
EventBus的使用技巧和解析
EventBus由greenrobot贡献(该组织还贡献了greenDAO),一个Android事件发布/订阅轻量级框架。 它是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过EventBus实现。原创 2018-01-03 21:31:55 · 2595 阅读 · 0 评论 -
关于自定义View中wrap_content属性失效的问题
我们在使用自定义控件的时候,有时候会发现当我们设置子View的属性为wrap_content时,发现它最终展现的效果跟我们说预想的不一样,它展现的是match_parent的效果,这是为什么呢?先把问题抛出来,接下来就来简要讲解一下。问题就出在我们自定义View时的绘制视图阶段,即onMeasure()设置View宽/高这一步。 我们在自定义View的onMeasure方法中,是这样写的:原创 2018-01-09 20:32:41 · 3058 阅读 · 1 评论 -
Androidの教你做闪屏启动页
老规矩,效果图如下:源码如下:https://github.com/ok406lhq/StartPageDemo启动页的开发主要包括了开屏闪屏和广告页的实现,效果如上图,具体的实现如下。#####1、闪屏设计实现方式有比较多种,其中有一种是通过Intent跳转的方式,跳转到一个布局只有布局中添加了闪屏图片的SplashActivity中,实现短暂的闪屏效果。这样做有一个小缺点(也可以忽...原创 2019-06-25 09:25:20 · 1955 阅读 · 0 评论 -
安卓设计模式のBuilder模式
Builder模式1、概念建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程相分离。这个概念有点难懂,其实就是说,客户端你不需要知道复杂对象的内部组成部分和数据的运行结构是什么,你只需要知道Builder这个类型就可以了,它的关注点放在如何一步步创建一个复杂的对象上,而不是把复杂对象一步步拆开来。 它支持链式调用,Builder对象调用函数后会返回一个Bu原创 2017-11-21 20:36:44 · 690 阅读 · 2 评论 -
安卓设计模式の单例模式
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例在安卓中,常用到的单例模式有六种: 饿汉\懒汉\懒汉线程安全\DCL\静态内部类\枚举;下面将一一作介绍一、饿汉模式codepublic class HungrySingleton { private static final原创 2017-11-21 11:51:19 · 664 阅读 · 0 评论 -
Android多线程—AsyncTask的完全解析
AsyncTaskAsyncTask封装了线程池和Handler,它主要是为了方便开发者在子线程中更新UI。AsyncTask是一种轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和最终结果返回给主线程并在主线程中更新UI。概述AsyncTask是一个抽象的泛型类,提供了三个泛型参数Params、Progress和Result,他们的含义如下:Params:表示参数的类型,启动任转载 2017-10-13 10:22:29 · 1961 阅读 · 0 评论 -
Android Studio中导出数据库文件的方法以及出现Failed to pull selection: open failed: Permission denied的解决思路
关于操作db文件导出Failed to pull selection: open failed: Permission denied问题的处理方法在遇到这个问题之前,你可能连data这个目录都打不开。。对此,解决办法是去到安卓的adb目录\Android\sdk\platform-tools下按住Shift右键“在此处打开命令行窗口”,进入命令行窗口后:需要操作的命令有: 1、adb shell进原创 2017-06-16 21:45:27 · 12774 阅读 · 5 评论 -
Android Studio踩坑日记之导入第三方类库爆红色J错误
导入第三方库SlidingMenu导入步骤这里有说–传送门~Android Studio导入第三方库(SlidingMenu)教程需要注意的是这里: 原本你去SlidingMenu里面复制到的应该是src、java文件夹和AndroidManifest.xml这三个,就像下面这样: 但是这样的话会出现一个问题,就是as没办法辨别里面的api,所以会出现爆红色“J”的错误 注意要将src原创 2017-04-16 15:16:51 · 2186 阅读 · 0 评论 -
Service生命周期解析及启动Service的方法
生命周期解析好的,从上图的生命周期,我们可以知道,Android中使用Service的方式有两种:1)StartService()启动Service2)BindService()启动ServicePS:还有一种,就是启动Service后,绑定Service!1)相关方法详解:onCreate():当Service第一次被创建后立即回调该方法,该方法在整个生命周期 中只会调用依次!onDe原创 2016-10-16 10:08:25 · 2055 阅读 · 0 评论 -
安卓网络编程先关知识的精确概述
网络图片查看器确定图片的网址发送http请求URL url = new URL(address);//获取连接对象,并没有建立连接HttpURLConnection conn = (HttpURLConnection) url.openConnection();//设置连接和读取超时conn.setConnectTimeout(5000);conn.setReadTimeout(500原创 2016-09-25 23:28:56 · 255 阅读 · 0 评论 -
Android模拟器访问服务器failed to connect to /(主机服务端ip) (port 8080) after 5000ms
如果是windows7,请关闭防火墙即可。控制面板->所有控制面板项->Windows 防火墙->自定义设置搞定这个操作后,你就可以自己连接网络服务器收发数据 09-22 10:41:37.111: W/System.err(16959): java.net.SocketTimeoutException: failed to connect to /192.168.1.105 (port 8080)原创 2016-09-22 11:12:03 · 20251 阅读 · 5 评论 -
安卓适配器的一些知识
适配器顾名思义,就是把一些数据给弄得适当,适合以便于在View上显示。可以看作是界面数据绑定的一种理解。它所操纵的数据一般都是一些比较复杂的数据,如数组,链表,数据库,集合等。适配器就像显示器,把复杂的东西按人可以接受的方式来展现。那么适配器是怎么处理得到的数据,并把它显示出来的呢。其实很简单,说白了适配器它也是一个类,在类里面它实现了父类的这几个方法:publicint getCount() //原创 2016-09-20 21:09:46 · 352 阅读 · 0 评论 -
数据存储和界面展现之二
测试黑盒测试 测试逻辑业务白盒测试测试逻辑方法根据测试粒度方法测试:function test单元测试:unit test集成测试:integration test系统测试:system test根据测试暴力程度冒烟测试:smoke test压力测试:pressure test单元测试junit定义一个类继承AndroidTestCase,在类中定义方法,即可测试该方法在指定转载 2016-09-19 16:42:18 · 295 阅读 · 0 评论 -
android:layout_gravity和android:gravity属性的区别
android:layout_gravity和android:gravity属性的区别一、介绍: * gravity的中文意思就是”重心“,就是表示view横向和纵向的停靠位置 * (1).android:gravity:是对view控件本身来说的,是用来设置view本身的内容应该显示在view的什么位置,默认值是左侧。也可以用来设置布局中的控件位置 * (2).android:layo原创 2016-09-17 09:53:56 · 382 阅读 · 0 评论 -
Android Fragment
转载请标明出处:http://blog.youkuaiyun.com/lmj623565791/article/details/42628537,本文出自:【张鸿洋的博客】 很久以前写过两篇Fragment的介绍,主要就是介绍其功能:Android Fragment 真正的完全解析(上)和Android Fragment 真正的完全解析(下) 有兴趣的可以凑合看下。之前的博客属于怎么使用Fragment,本文转载 2017-06-17 10:17:30 · 315 阅读 · 0 评论 -
Kotlin第一学
Kotlin第一学什么是KotlinKotlin,它是JetBrains开发的基于JVM的语言。补充一下JetBrains,JetBrains公司是一个吊炸天的公司,起先开发的IntelliJ IDEA被认为是世界上最好的java开发工具之一,后来基于该IDE开发创造了Android Studio,被谷歌列为官方安卓开发IDE(实际上是基于Intellij,作为该平台的一个插件)。而后开发了Kotl原创 2017-07-10 17:30:05 · 442 阅读 · 0 评论 -
Kotlin第二学
Kotlin第二学基础语法怎么定义一个类使用class关键字即可class MainActivity{ ··· }它有一个默认的唯一的构造器,大部分情况下我们只需要这个默认构造器。其次你只需要在类名后面写上它的参数;如果这个类没有任何内容,我们可以省略大括号:class Person(name:String,id:Int)如果构造函数有函数体,那么写在哪呢?你可以写在init块里面:c原创 2017-07-10 17:31:57 · 239 阅读 · 0 评论 -
Activity的四种启动模式讲解
首先说一下Activity为什么需要启动模式。我们知道,在默认情况下,当我们多次启动同一个Activity的时候,系统会创建多个实例并把它们一一放入任务栈中,当我们按BACK键时,会发现这些Activity会一一回退。任务栈是一种“后进先出”的栈结构,这个较好理解,每按一下Back键就会有一个Activity出栈,直到栈为空为止,当栈中无任何Activity时,系统就会自动回收这个任务栈。知道了Ac转载 2017-10-03 10:56:01 · 325 阅读 · 0 评论 -
AIDL实现远程服务
一、定义AIDl:android interface define language 安卓接口定义语言,这是一种新的语言,它可以被编译器自动编译为java语言,具体方法为在应用项目java文件夹中: “New –> File –> AIDL” 然后定义自己需要用到的接口方法,点击: “Build -> Make Project” 然后在Project视图下的“\app\build\gene原创 2017-09-22 14:15:19 · 910 阅读 · 0 评论 -
安卓进程间通信的四种方式(含案例)
由于应用程序之间不能共享内存。在不同应用程序之间交互数据(跨进程通讯),在android SDK中提供了4种用于跨进程通讯的方式。这4种方式正好对应于android系统中4种应用程序组件:Activity、Content Provider、Broadcast和Service。转载 2017-09-21 00:26:13 · 10734 阅读 · 0 评论 -
Binder学习指南(转)
毫不夸张地说,Binder是Android系统中最重要的特性之一;正如其名“粘合剂”所喻,它是系统间各个组件的桥梁,Android系统的开放式设计也很大程度上得益于这种及其方便的跨进程通信机制。理解Binder对于理解整个Android系统有着非常重要的作用,Android系统的四大组件,AMS,PMS等系统服务无一不与Binder挂钩;如果对Binder不甚了解,那么就很难了解这些系统机制。转载 2017-10-07 15:03:53 · 1110 阅读 · 0 评论 -
案例讲解安卓的事件传递机制
首先关于安卓的事件传递机制我们需要知道一些东西: View的继承关系,有关事件的几个方法: 跟Touch事件有关的处理方法主要有三个: //分派事件 public boolean dispatchTouchEvent(MotionEvent ev) //拦截事件 public boolean onInterceptTouchEvent(MotionEvent ev) //处理事件原创 2017-09-19 20:46:40 · 435 阅读 · 0 评论 -
LayoutInflater.inflate方法加载View
首先我们来看看关于布局加载,我们最先接触到的是setContentView()方法来完成的。我们还用到了LayoutInflater类来加载布局,其实setContentView()方法内部就是通过LayoutInflater实现布局加载的,只不过这部分源码不太容易查到……原创 2017-09-18 14:44:13 · 5239 阅读 · 0 评论