![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
文章平均质量分 69
hequnwang10
这个作者很懒,什么都没留下…
展开
-
字节跳动提前批-Android开发一面
首先自我介绍。原创 2022-07-22 10:16:40 · 691 阅读 · 1 评论 -
Http 与 Https 的区别
HTTPS协议HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之原创 2022-05-31 11:16:51 · 449 阅读 · 0 评论 -
Handler 机制和原理-Android
handler主要包含 Looper,MessageQueue,Message 和 Handler。Looper:它在消息机制里是用来把普通线程转成looper线程的(Looper.prepare()),并担当消息循环的任务,当然,UI 线程是通过Looper.PrepareMainLoper()。它会开启无限循环(Loper.loop())并不停的从 MessageQueue 中查看是否有新消息,如果有就拿出来处理,如果没有呢,就阻塞(其实真正的阻塞在 MessageQueue 的 next 里)。L原创 2022-05-29 21:57:03 · 365 阅读 · 0 评论 -
子线程是否可以更新UI-Android
Android 中子线程在满足一定的条件下可以更新 UI。首先说一下抛出异常at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:7905)@Overridepublic void requestLayout() { if (!mHandlingLayoutInLayoutRequest) { checkThread(); mLayoutRequested = true;原创 2022-05-29 17:24:28 · 1428 阅读 · 0 评论 -
Activity.runOnUiThread介绍-Android
Android中我们不在子线程中操作UI,但是如果非要在子线程中操作完后实现对UI操作,这里的实现方法如下:mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new Thread(new Runnable() { @Override public void run() { // 子线原创 2022-05-29 16:57:52 · 297 阅读 · 0 评论 -
AsyncTask-Android
Android如果要执行耗时操作,则必须方法子线程中执行。除了Thread可以开启子线程外,Android中扮演线程角色的有很多。AsyncTask是一个执行异步任务的类,底层是采用线程池实现的。AsyncTask是一个抽象类,它是由Android封装的一个轻量级异步类(轻量体现在使用方便、代码简洁),它可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程并在主线程中更新UI。作用:实现多线程:在工作线程中执行任务,如耗时任务异步通信、消息传递:实现工作线程 & 主线程(UI原创 2022-05-29 16:33:40 · 171 阅读 · 0 评论 -
IntentService-Android
IntentService 是 Service 的子类,继承于 Service 类,用于处理后台异步请求任务。用于处理后台长时间的耗时操作,如:下载文件、播放音乐。用完自动结束。如果是普通的Service ,需要使用stopSelf()。使用方法IntentService 是抽象类,所以在实际使用中,我们需要创建一个 IntentService 子类来具体实现创建 IntentService 子类,并在清单文件中注册。在 Activity 中通过调用 startService(Intent) 方法原创 2022-05-29 10:58:09 · 160 阅读 · 0 评论 -
HandlerThread使用-Android
handlerThread是内部有一个looper轮询器的Thread线程。HandlerThread,是一个具有Looper的线程,这个Looper可以用于创建Handler;另外start()必须执行,因为Handler毕竟是个Thread,调用start()会走到run()中,而HandlerThread恰恰是在run中创建的Looper。HandlerThread产生的背景:google为了避免以下几种情况,给android开发者提供了这样一个异步框架:在需要做子线程耗时操作时,我们有可能会原创 2022-05-28 16:17:56 · 1162 阅读 · 0 评论 -
ContentProvider ContentResolver ContentObserver关系-Android
ContentProvider四大组件的内容提供者,主要用于对外提供数据实现各个应用程序之间的(跨应用)数据共享,比如联系人应用中就使用了ContentProvider,你在自己的应用中可以读取和修改联系人的数据,不过需要获得相应的权限。其实它也只是一个中间人,真正的数据源是文件或者SQLite等一个应用实现ContentProvider来提供内容给别的应用来操作,通过ContentResolver来操作别的应用数据,当然在自己的应用中也可以ContentResolver内容解原创 2022-05-27 16:55:21 · 201 阅读 · 0 评论 -
Intent传输数据大小限制-Android
Intent传输数据的大小受Binder的限制,上限是1M。不过这个1M并不是安全的上限,Binder可能在处理别的工作,安全上限是多少这个在不同的机型上也不一样。Intent 传输数据的机制中,用到了 Binder。Intent 中的数据,会作为 Parcel 被存储在 Binder 的事务缓冲区(Binder transaction buffer)中的对象进行传输。而这个 Binder 事务缓冲区具有一个有限的固定大小,当前为 1MB。你可别以为传递 1MB 以下的数据就安全了,这里的 1MB 空间原创 2022-05-27 16:47:15 · 4469 阅读 · 0 评论 -
onNewIntent使用-Android
standard默认启动模式,每次激活Activity时都会创建Activity,并放入任务栈中,永远不会调用onNewIntent()。singleTop如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,并调用其onNewIntent(),否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例,而不会调用onNewIntent(),此时就跟standard模式一样)。singleTask如果在任务栈中已经有该Activity..原创 2022-05-27 16:24:59 · 577 阅读 · 0 评论 -
Activity生命周期-切换横竖屏-Android
创建一个项目,测试横竖屏切换的时候生命周期的变换ScreenActivity.javapublic class ScreenActivity extends AppCompatActivity { private static final String TAG = "ScreenActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(sav原创 2022-05-27 15:33:11 · 488 阅读 · 0 评论 -
ContentProvider内容提供者-Android
ContentProvider 应用程序间非常通用的共享数据的一种方式,也是 Android 官方推荐的方式。封装。对数据进行封装,提供统一的接口,使用者完全不必关心这些数据是在 DB ,XML 、Preferences 或者网络请求来的。当项目需求要改变数据来源时,使用我们的地方完全不需要修改。提供一种跨进程数据共享的方式。应用程序间的数据共享还有数据更新通知机制。因为数据是在多个应用程序中共享的,当其中一个应用程序改变了这些共享数据的时候,它有责任通知其它应用程序,让它们知道共享数据被修改了,这原创 2022-05-27 10:50:17 · 197 阅读 · 0 评论 -
Service保活
实现APP挂后台一直存活不会被系统杀掉进程,这也就是常说的service保活。实现方案onStartCommand方法,返回START_STICKY提升Service优先级在AndroidManifest.xml文件中对于intent-filter可以通过android:priority = “1000”这个属性设置最高优先级,1000是最高值,如果数字越小则优先级越低,同时适用于广播。提升Service进程优先级,比如改为前台进程Android中将进程分成6个等级,由高到低分别是:前台进程、原创 2022-05-26 22:11:13 · 657 阅读 · 1 评论 -
Intent与IntentFilter-Android
Intent是信息的载体,用它可以去请求组件做相应的操作,Intent促进了组件之间的交互,做为消息的载体,去指导组件做出相应的行为,Intent可以携带数据,传递给Activity/Service/BroadcastReceiver。启动Activity。Activity可以简单的理解为手机屏幕中的一个页面,你可以通过将Intent传入startActivity方法来启动一个Activity的实例,也就是一个页面,同时,Intent也可以携带数据,传递给新的Activity。如果想要获取新建的Acti原创 2022-05-26 21:15:39 · 199 阅读 · 0 评论 -
Service服务-Android
Service既不是一个线程,Service通常运行在当成宿主进程的主线程中,所以在Service中进行一些耗时操作就需要在Service内部开启线程去操作,否则会引发ANR异常。也不是一个单独的进程。除非在清单文件中声明时指定进程名,否则Service所在进程就是application所在进程。Service默认线程为UI线程,不要在Service中执行耗时的操作,除非你在Service中创建了子线程来完成耗时操作。一、用法1、启动方式:startService()bindService.原创 2022-05-26 16:55:35 · 118 阅读 · 0 评论 -
Context面试-Android
Context 也就是上下文对象,是 Android 常用的类。我们常用的 Activity,Service 和 Application 都间接的继承了 Context。Context 是一个抽象类。日常开发中,使用 Context 的地方数不胜数,比如像弹 Toast、创建 Dialog、创建自定义 View 等等时候都需要传入 Context 对象,还有像启动 Activity、Service、访问资源和获取系统服务等等,都离不开 Context。它允许访问特定于应用程序的资源和类,以及对应用程序级操原创 2022-05-26 10:25:20 · 215 阅读 · 0 评论 -
Broadcast广播-Android
一、Broadcast1、定义在 Android 中,Broadcast 是一种在应用程序之间传输信息的机制,要发送的广播内容是一个 Intent,这个 Intent 中可以携带我们要传送的数据。(数据小于1MB)普通广播Normal Broadcast:异步执行的广播,所有接收者在同一时刻收到这条广播消息。效率高,没有先后顺序,无法截断。属于全局广播。调用 sendBroadcast()发送,最常用的广播。有序广播Ordered Broadcast:同步执行的广播,发出去的广播会被广播接收原创 2022-05-25 15:07:01 · 1050 阅读 · 1 评论 -
LocalBroadcastManager包导入问题
填入com.google.android:support-v4:r7然后导包成功!原创 2022-05-25 14:56:25 · 323 阅读 · 0 评论 -
Android启动模式LaunchMode的应用场景
LaunchMode 有四种,分别为 Standard,SingleTop,SingleTask 和 SingleInstance,每种模式的实现原理一楼都做了较详细说明,下面说一下具体使用场景:Standard:Standard 模式是系统默认的启动模式,一般我们 app 中大部分页面都是由该模式的页面构成的,比较常见的场景是:社交应用中,点击查看用户A信息->查看用户A粉丝->在粉丝中挑选查看用户B信息->查看用户A粉丝… 这种情况下一般我们需要保留用户操作 Activity 栈的原创 2022-05-24 21:54:45 · 582 阅读 · 1 评论 -
Activity 与 Fragment通信方式-Android
Fragment 与 Activity 通信存在三种情形:Activity 操作内嵌的 FragmentFragment 操作宿主 ActivityFragment 操作同属 Activity中的其他 FragmentFragment 与 Activity 通信方式:Bundle接口回调广播EventBusHandlerViewModel一、Bundle1、Activity 传递数据到 Fragmentactivity_main.xml<?xml ver原创 2022-05-24 21:36:23 · 1188 阅读 · 0 评论 -
支付宝APP支付-Android+springboot搭建后端
支付宝支付相比于微信支付要简单点,支付流程如下所示,之前介绍过微信支付(一)、(二)、(三),在此基础上继续完善支付宝支付。一、前期准备工作首先根据支付宝官方文档拿到一些参数,主要是APPID,商户应用私钥和公钥,支付宝公钥,授权回调地址。这里对于准备工作省略!二、Springboot后端导入依赖 <!--支付宝支付SDK--> <dependency> <groupId>com.alipay.sd原创 2021-12-24 23:03:21 · 3438 阅读 · 0 评论 -
微信APP支付-Android+springboot搭建后端(三)
在微信APP支付-Android+springboot搭建后端(一)和微信APP支付-Android+springboot搭建后端(二)这两篇中基本介绍完了微信APP支付的流程,本篇主要补充一点——对于支付通知的处理。这里主要是后端在处理,Android端在支付完后继续处理Android端的业务,但是后端需要接收微信服务器端发来的支付通知消息。Springboot后端WxPayController @Resource private Verifier verifier;/**原创 2021-12-23 21:43:52 · 1379 阅读 · 0 评论 -
微信APP支付-Android+springboot搭建后端(二)
微信APP支付-Android+springboot搭建后端(一)上篇文章介绍了后端搭建的过程,这篇介绍Android端搭建过程。首先打开微信商户平台的APP接入文档,按照这个步骤来。在这里主要介绍如何接入。一、Android端按照官方要求将一些参数拿到。1、创建项目主要的目录结构如下,其中要注意的是wxapi包按照官方要求,必须在你的包之下。2、添加依赖app/build.gradle在app/build.gradle下加入微信支付的依赖以及okhttp3。 implementat原创 2021-12-23 17:05:16 · 1780 阅读 · 0 评论 -
微信APP支付-Android+springboot搭建后端(一)
这篇教程将详细的介绍如何实现微信APP支付,分为Android移动端开发和springboot后端开发,有一些在开发过程中遇到的坑将会被标注,解决方案也会给出。一、准备工作准备工作就是获取必要的参数,注册微信商户平台和微信开放平台分别获取到商户号和APPID,并且在微信商户平台申请API证书、设置API密钥、设置APIv3密钥等这些工作在公司里会有相关人员做好,将参数给出,直接拿来用即可。准备工作就是比较繁琐,而且微信开发者认证需要300元。做完相关工作后,一定要查看权限是否申请到,微信商户平原创 2021-12-23 16:08:35 · 3482 阅读 · 2 评论 -
微信登录实现-Android
微信登录的实现与qq登录类似。原创 2021-08-06 22:44:47 · 2306 阅读 · 6 评论 -
QQ分享功能实现-Android
这篇主要介绍实现QQ的分享图片功能,这里用QQ官方提供的SDK。QQ的分享功能直接使用,不需要授权软件,所以比较方便。一、准备工作1、创建应用腾讯QQ互联官网进行注册登录,并且创建应用管理,,获取到你的APP ID和APP Key。这里我已经完成了2、集成SDKQQ互联的官方文档下载SDK,并将jar包导入项目中,这里我已经导入完成了。按照官方文档的步骤一步一步的完成。二、代码1、将open-sdk.jar加入编译路径在app目录下的build.gradle中添加dependencies原创 2021-08-06 15:22:10 · 1770 阅读 · 0 评论 -
Glide介绍-高效的Android图片加载库
Glide是一个快速高效的Android图片加载库,注重于平滑的滚动。Glide提供了易用的API,高性能、可扩展的图片解码管道(decode pipeline),以及自动的资源池技术。Glide 使用简明的流式语法API,这是一个非常棒的设计,因为它允许你在大部分情况下一行代码搞定需求:Glide.with(fragment) .load(url) .into(imageView);这里我么只是简单介绍如何使用Glide加载网络图片,具体使用去看Glide官网和GitHub网站。1原创 2021-08-04 22:43:29 · 380 阅读 · 1 评论 -
Mob实现第三方QQ登录-Android
这篇文章介绍使用Mob实现QQ登录。Mob官方提供的demo地址显示了如何使用第三方登录。一、申请Mob的appkey和appsecret1、打开Mob的官方地址进行申请注册然后我们创建新的应用。这里请查看mob提供的官方文档进行操作。这里我就已经创建好了新的测试APP。二、申请腾讯QQ的appkey和appsecret这里按照腾讯开发者平台给的步骤去创建一个APP,申请个人开发者,创建应用。注意:这里创建应用的时候,名称写的尽量是申请能过的,而且最好要有logo,这样才会审核通过,大概原创 2021-08-04 15:33:22 · 758 阅读 · 0 评论 -
Android摄像头相册使用+上传照片至服务器(下篇)
《Android摄像头相册使用+上传照片至服务器(上篇)》这篇文章介绍如何将照片存储至阿里云的OSS服务,已经上传成功,在这里继续介绍,如何下载已经存储的照片并将其显示在Android中。阿里云对象存储OSS服务的后台,上传的图片,会有相应的URL,这是这个图片的网络地址,所以我们就使用OKhttp3来请求网络图片并将其显示在UI界面中。一、Android前端1、布局文件<?xml version="1.0" encoding="utf-8"?><LinearLayout xm原创 2021-08-03 22:52:40 · 371 阅读 · 4 评论 -
Android摄像头相册使用+上传照片至服务器(上篇)
这篇教程主要介绍如何使用摄像头还有相册,还介绍如何将获取到的照片上传至服务器保存(这里主要是用到了阿里云的对象存储OSS服务)一、前端创建Android项目1、布局文件<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:l原创 2021-08-03 18:03:41 · 3565 阅读 · 11 评论 -
Android Studio 的 Gradle Task 没有显示的问题
问题:我想用gradle来生死MD5,打开gradle后发现右侧边栏没有Task解决:File -> Settings -> Experimental -> 取消勾选 “Do not build Gradle task list during Gradle sync”问题解决了!原创 2021-08-02 22:50:20 · 971 阅读 · 0 评论 -
Android实现倒计时效果-获取验证码
获取验证码后,验证码几分钟之内有效,现在实现这个效果。1、布局文件<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xml原创 2021-07-31 20:29:11 · 86 阅读 · 0 评论 -
Android实现阿里云短信业务获取验证码-后端SSM+redis
这里想实现的功能是Android前端通过后端接口获取验证码,五分钟有效,将验证码保存至redis中。一、开通阿里云短信业务实现阿里云短信业务获取验证码流程如下:进入阿里云控制台找到短信服务,点击免费开通2. 国内消息,有签名管理和模板管理,这里请自行搜索教程申请。现在阿里云的申请很麻烦,如果没有上线APP或者备过案的网站很难通过。估计这一步就会劝退很多人,而且阿里云的短信还是收费的。完成之后就可以进行使用了阿里云的短信业务了。二、官方代码实现阿里云给了代码示例,打开链接地址就可以查原创 2021-07-31 19:50:34 · 939 阅读 · 1 评论 -
Android登录注册功能加密处理
《Android使用OKhttp3实现登录注册功能+springboot搭建后端》这篇教程介绍了登录注册的流程及基本实现。但是有一些小问题。就是后端处理的时候,URL将用户名密码使用明文加密。这样抓包就很容易获取隐私数据。这篇完善这个问题。例如这个网站,我们进行抓包获取到请求,这里的密码是加密的。加密算法分为对称加密和非对称加密。这里我们就简单介绍如何使用加密算法来实现这个功能(主要强调的是流程)。一、Android前端这里使用AES对称加密算法1、创建AESHelper.javaimport原创 2021-07-31 12:22:29 · 1177 阅读 · 0 评论 -
Android解析json-Gson使用
Gson是一个第三方解析json的库。需求分析:后端向我们前端传递json时,我们需要解析json然后找到我们想要的值。直接讲解如何使用这个第三方库。一、安装依赖implementation 'com.google.code.gson:gson:2.8.6'二、基础用法1、创建实体类Android前端需要创建一个实体类,与后端传递过来的json相对应。这里拿上一篇文章《Android使用OKhttp3实现登录注册功能+springboot搭建后端》的案例分析。比如点击登录之后,后端会传递一个js原创 2021-07-29 16:31:44 · 339 阅读 · 0 评论 -
解决Okhttp3使用post请求后的response.body()为空
一、问题代码如下:public void login(View view) { loginUser = new LoginUser(); loginUser.setUserName(username.getText().toString()); loginUser.setUserPassword(MD5.encrypt(password.getText().toString())); new Thread(new Runnable() {原创 2021-07-28 21:49:06 · 5742 阅读 · 3 评论 -
Android使用OKhttp3实现登录注册功能+springboot搭建后端
这篇教程主要实现Android使用OKhttp3实现登录注册的功能,后端使用SSM框架。一、Android前端实现新建一个login的项目,主要的几个文件在这里1、gradle引入OKhttp3依赖 implementation 'com.squareup.okhttp3:okhttp:3.14.7' implementation 'com.squareup.okio:okio:1.17.5'2、activity_main.xml布局文件<?xml version="1.原创 2021-07-27 23:31:11 · 7100 阅读 · 4 评论 -
android studio版本过低需要更新问题
问题:This version of Android Studio cannot open this project, please retry with Android Studio 4.0 or newer.从github上下载的项目出现这个问题:解决:方法一打开配置文件:将gradle版本降低 4.1.0—>3.5.0。方法二更新android studio 至对应的gradle 版本....原创 2021-05-21 11:41:23 · 860 阅读 · 2 评论 -
Ubuntu 安装Android studio3.5+真机调试
首先确认原创 2021-05-17 16:09:39 · 330 阅读 · 0 评论