Android

详解Android中的ActivityThread和APP启动过程

2021-06-07
ActiviryThread ActivityThread的初始化 ActivityThread即Android的主线程,也就是UI线程,ActivityThread的main方法是一个APP的真正入口,MainLooper在它的main方法中被创建. //ActivityThread的main方法 public static void main(String[] args) { ... Looper.prepareMainLooper(); ActivityThread thread = ne

详解Gradle构建过程

2021-06-07
Gradle构建过程 根据在上图中所示,Gradle 的构建过程主要分为三个阶段: 初始化阶段 配置阶段 执行阶段 监听Gradle初始化时机 在这个初始化阶段中主要有两个时机需要关注: setting.gradle 执行结束的监听 //1.setting.gradle 执行结束的监听 gradle.settingsEvaluated { println "settings.gradle 初始化执行结束" } 参与构建的Project对象创建完毕的监听 //2.参与构建的Project

android自定义View之复合控件

2021-06-07
复合控件可以很好地创建出具有重用功能的控件集合. 很多的APP都有一些共通的UI界面,为了统一应用程序的风格,下面我们就以一个Topbar为实例讲解复合控件. 实现效果如图: 第一步:定义属性 在res资源目录的values目录下创建一个attrs.xml属性定义文件,为一个View提供可自定义的属性. 代码中,通过标签声明了自定义属性,并通过name属性来确定引用的名称. <?xml version="1.0" encoding="utf-8"?> &

解析Android框架之Volley源码

2021-06-07
Volley简单使用 我这里是以依赖架包的形式 ,大家也可以以gradle的形式进行依赖. 好了,接下来上代码了..... //获取volley的请求对象 RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext()); StringRequest stringRequest = new StringRequest(StringRequest.Method.GET, "http://www.baidu.com

解析Android框架之OkHttp3源码

2021-06-07
OkHttp流程图 OkHttp基本使用 gradle依赖 implementation 'com.squareup.okhttp3:okhttp:3.11.0' implementation 'com.squareup.okio:okio:1.15.0' /** *这里拿get请求来 * 异步的get请求 */ public void okhttpAsyn() { //设置超时的时间 OkHttpClient.Builder builder = new OkHttpClient.Builder

详解Android Handler机制和Looper Handler Message关系

2021-06-07
概述 我们就从以下六个问题来探讨Handler 机制和Looper.Handler.Message之前的关系? 1.一个线程有几个Handler? 2.一个线程有几个Looper?如何保证? 3.Handler内存泄漏原因?为什么其他的内部类没有说过这个问题? 4.为何主线程可以new Handler?如果在想要在子线程中new Handler 要做些什么准备? 5.子线程中维护的Looper,消息队列无消息的时候的处理方案是什么?有什么用? 6.Looper死循环为什么不会导致应用卡死? 一.

Android 中使用RadioGroup和Fragment实现底部导航栏的功能

2021-06-07
在一些购物商城中经常会遇到这类效果,效果图如下: 先看效果图 步骤一: 完成对主界面main.xml的创建: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/

浅谈Android性能优化之内存优化

2021-06-06
1.Android内存管理机制 1.1 Java内存分配模型 先上一张JVM将内存划分区域的图 程序计数器:存储当前线程执行目标方法执行到第几行. 栈内存:Java栈中存放的是一个个栈帧,每个栈帧对应一个被调用的方法.栈帧包括局部标量表, 操作数栈. 本地方法栈:本地方法栈主要是为执行本地方法服务的.而Java栈是为执行Java方法服务的. 方法区:该区域被线程共享.主要存储每个类的信息(类名,方法信息,字段信息等).静态变量,常量,以及编译器编译后的代码等. 堆:Java中的堆是被线程共享的,

浅谈Android应用安全防护和逆向分析之apk反编译

2021-06-06
概述 这里是Mac环境,如果是window环境的同学,在环境搭建和工具上可以选择Window环境的.先看看需要到的工具: 1.apktool:https://ibotpeaches.github.io/Apktool/install/ 2.dex2jar:https://github.com/pxb1988/dex2jar 3.jd-gui:http://jd.benow.ca 注意:工具一定要是当前最新版本的,否则很容易出现一些莫名其妙的错误. 先看一下项目的包结构 然后在简单看MainAct

详解Android安全防护之加密算法

2021-06-06
摘要 也许有些开发者或者企业觉得.我们公司的app,数据量这些少,会有那个黑客吃饱了没事做来破解啊.又不是支付宝,或者其他那些用户量很多的应用.如果是这样想的话,那只能说目光短浅了. Android应用常用的加密算法 如果说按加密的内容是否可以还原,可以分为可逆加密和非可逆加密. 非可逆加密:也就是说加密后的数据是不能还原成原来的数据.比如MD5加密 加密一个密码:123456 加密后成: afabsbfbabf437hfbbff73(结果并不一定是这个,只是举例).也就是说加密后的结果afab

如何从外部浏览开启Android App

2021-06-05
这里主要用的是第三方的东西,就是魔窗中的mlink功能.想了解魔窗的朋友就到官网去看看吧.在这里我说一下我通过魔窗是怎么实现的. 首先我们看一下浏览器上面的代码,这个就是我们从该页面上跳转打开app. <html> <head> <title>浏览器打开APP测试</title> <script src="https://cdn.bootcss.com/jquery/3.1.1/jquery.js"></script&g

Flutter 底部弹窗ModelBottomSheet的使用示例

2021-06-05
实现效果 最终实现效果如图片所示,分布演示了基础的,全屏的和自定义的底部弹窗形式. 代码结构 在消息页面 message.dart 中,使用 Column 组件构建了三个按钮,点击每个按钮调用不同的底部弹窗显示.这部分代码不展示,核心注意的方式是按钮的 onPressed 响应方法,需要使用 async 修饰,这是因为 ModalBottomSheet 的返回结果是一个 Future 对象,需要通过 await 来获取返回结果. onPressed: () async { int selecte

如何在Flutter中嵌套Android布局

2021-06-04
效果 本文具体demo效果如下 开发 1.首先创建flutter项目,在项目中定义好flutter需要展示布局: @override Widget build(BuildContext context) { return Scaffold( body: Column( crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ Expanded( child: Center( child: Text( 'Android按钮

Flutter 开发一个登录页面

2021-06-03
业务逻辑 为了演示登录跳转,在分类浏览先做了一个简单的按钮,点击跳转到登录页面.实际的 App 中,通常会是触发某些需要登录才能查看的操作后再跳转到登录界面. 布局分析 界面如上图所示,从界面上看,整体内容区域是居中的,内容的布局是一个简单的列式布局,包括了顶部的一个 Logo(通常是 App图标),再往下是两个文本输入框,最后是登录按钮.整体布局比较简单,使用 Center 下嵌一个Column 进行列布局即可. 图片圆形裁剪 在 Flutter 中实行图片圆形裁剪有两个方式,一是使用外层的容

Flutter 如何封装文本输入框组件

2021-06-03
UI组件封装的考虑要点 封装一个 UI 组件,通常需要考虑下面这三个点: 接口如何定义:即组件接收什么输入参数来控制组件的外观和行为: 与业务分离:UI 组件应当只负责界面,而不负责业务,具体的业务应当由业务层完成: 简单易用:因为是 UI 组件,要尽可能地简单易用,方便使用者快速上手. 文本输入框接口定义 首先先看一下我们上一篇使用文本框的代码,这里实际上只是调用了一个函数返回新的组件,之所以要这么做是因为用户名.密码使用了成员属性,需要根据不同的成员属性来设置不同的行为,主要有: 文本框装饰

Android仿腾讯视频实现悬浮窗效果

2021-06-02
前言 相信大家对Android悬浮窗应该是很熟悉了,比如说腾讯视频.爱奇艺等APP都有悬浮窗功能.在你打游戏的同时还可以看视频,充分利用屏幕空间.还有微信,360手机卫士等APP也有悬浮窗功能.那么Android悬浮窗是怎么实现的呢? 项目源码:Android仿腾讯视频悬浮窗的实现 其实并不难,核心代码就只有一行: windowManager.addView(view, layoutParams) 效果图 对view比较熟悉的同学们应该发现了,其实我们的悬浮窗就是一个view,我把只需要把vie

android如何获取textview最多显示

2021-06-01
方法一 工作中用的一个方法,虽然不算特别准确,但效果还是不错的,这里分享下. /** * 获取textview最大能显示几个字 * @param text 文本内容 * @param size 文本字体大小 * @param maxWidth textview的最大宽度 * @return */ private float getLineMaxNumber(String text, float size,float maxWidth) { if (null == text || "".

Android自定义view实现滑动解锁效果

2021-05-31
本文实例为大家分享了Android自定义view实现滑动解锁的具体代码,供大家参考,具体内容如下 1. 需求如下: 近期需要做一个类似屏幕滑动解锁的功能,右划开始,左划暂停. 2. 需求效果图如下 3. 实现效果展示 4. 自定义view如下 /** * Desc 自定义滑动解锁View * Author ZY * Mail sunnyfor98@gmail.com * Date 2021/5/17 11:52 */ @SuppressLint("ClickableViewAccessibili

RecycleView实现各种尺寸图片展示

2021-05-30
本文实例为大家分享了RecycleView实现各种尺寸图片展示的具体代码,供大家参考,具体内容如下 今天才发现,在一个RecycleView里可以展示各种尺寸的图片,贴图如下: 代码如下: package com.hisense.movienow.HorizontalView; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.support.

android RecycleView实现多级树形列表

2021-05-30
本文实例为大家分享了android RecycleView实现多级树形列表的具体代码,供大家参考,具体内容如下 实现多级树状列表: 1. Node.java public class Node<T, B> implements Serializable { /** * 传入的实体对象 */ public B bean; /** * 设置开启的图片 */ public int iconExpand = -1; /** * 设置关闭的图片 */ public int iconNoExpand =