- 博客(27)
- 收藏
- 关注
原创 Android 桌面小部件AppWidget的使用
实现一个桌面小部件,里面一个按钮一个textview,点击按钮开启服务,5秒内每秒更新data,并发送广播更新textview的text1.先在AndroidManifest.xml中定义桌面小部件(类似广播的静态注册)<receiver android:name=".AppWidget" android:exported="false"> <intent-filter>
2022-04-22 11:21:46
4284
原创 Handler源码分析笔记
1.handler线程切换原理消息发送和消费两者之间是基于内存共享机制,共享一份消息队列。采用ThreadLocal对线程进行管理,保证 每个线程上的Looper是相互独立的。在发送消息的过程中由Message去持有发送者的实例(Handler),导致处理消息的时候是哪个线程上创建的Handler就在那个线程上处理消息。2.Looper为什么不会阻塞主线程?ActivityThread main方法是Android app的入口,Looper.loop()方法必须死循环挂起,它如果.
2022-03-02 15:37:56
200
原创 Binder的简单了解笔记
一、Binder是什么?Binder是Android 进程间通信机制之一(IPC)二、为什么一线企业开发的app要使用多线程?1.突破进程内存限制:因为虚拟机分配给各个进程的运行内存是有限制的,LMK(低内存杀死机制)也会优先回收对系统资源占用多的进程。2.功能稳定性:独立的通信进程保持长链接的稳定性。3.规避系统内存泄漏:独立的webview进程阻隔内存泄漏导致的问题。4.隔离风险:对于不稳定的功能放入单独的进程,避免导致主线程崩溃。三、查看某个手机一个进程分配的运行内
2022-03-01 11:17:14
2391
原创 Retrofit源码分析笔记
一.仅使用okhttp进行网络请求存在的四个问题。1.复杂的接口配置需要手动进行(body、请求头、参数)2.需要手动解析response body3.无法自动完成线程切换4.嵌套网络请求会陷入“回调陷阱”二.okhttp和retrofit分别的职责是什么?1.okhttp和retrofit都是square公司开发的,okhttp的设计初衷只是单一的进行网络请求,是基于http协议来的。2.retrofit是RESTful风格的http网络框架,retrofit进行网络请求的本质
2022-02-23 10:43:42
1776
原创 WorkManager的学习和使用要点笔记
1.在oppo Android 5.1手机上报错Invoke-customs are only supported starting with Android O解决办法:在app的build.gradle中添加android{ compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }}2.Wor
2022-02-21 10:12:54
1439
原创 代理模式的学习
代理模式分类1.静态代理模式2.动态代理模式静态代理模式1.委托对象与代理对象需要实现相同的接口2.代理对象的构造方法中传人委托对象实例动态代理模式(通过反射机制动态生成代理者的对象)一、动态代理类import java.lang.reflect.InvocationHandlerimport java.lang.reflect.Methodclass DynamicProxy(val any: Any) : InvocationHandler { over
2022-02-14 11:47:28
199
原创 webview遇到的问题
we are sorry but privacy-document-web-external doesn’t work properly without javaScrpit enabled,please enable it to continue意思是没有开启JavaScrpit,开启后就没问题了webView.settings.javaScriptEnabled = true//是否允许JavaScript脚本运行,默认为false...
2022-01-05 11:33:44
2380
原创 多线程协作
package com.example.myapplication.testimport java.lang.Thread.sleepimport kotlin.concurrent.threadfun main(args: Array<String>) { //定义一个object对象,用于实现线程阻塞和唤醒 val o= Object() thread { //线程阻塞直到下载图片完成 synchronized(o){ .
2021-12-22 15:03:08
1561
原创 使用webview Android和js进行通信
Android调用js的方法webView.evaluateJavascript("javascript:aaa(1)") { value -> Log.i("webView", value ?: "null") }aaa是js端定义的方法,1为传的参数,value是方法返回的值js调用Android的方法1.定义一个类,里面定义一个带 @JavascriptInterface注解的方法,直接return js可以接收到返回值// 继承自Object类cla
2021-12-21 11:25:13
2088
原创 新项目导入的时候遇到的问题
一、Unrecognized Android Studio (or Android Support plugin for IntelliJ IDEA) version '201.8743.12.41.6858069', please retry with version 2020.3.1 or newer.解决办法:修改gradle的版本号1.第一个修改的是如下的版本号:2.第二个修改的是如下的版本号二、Could not find method buildFeatures(..
2021-12-16 13:55:25
2262
原创 内存抖动相关
目录内存抖动的定义内存泄漏和内存抖动的影响避免内存抖动(避免在很频繁调用的方法中创建对象)内存抖动的定义内存频繁地分配和回收,它伴随着频繁的GC。内存泄漏和内存抖动的影响内存泄漏:可用内存越来越少 -> OOM内存抖动:1.卡顿(进行垃圾回收的时候,其他线程会被挂起,比如点击一个按钮,但是在进行gc操作,ui线程被挂起,无法响应点击事件)2.OOM(如果使用标记-清除算法的话,频繁的进行垃圾回收会导致内存碎片化,连在一起的内存不足以分配给新的对象的时候就会报
2021-12-13 11:05:07
1403
原创 切到后台再切回app,退出登录直接退到桌面而不是登录页
原因:我退出登录是先销毁所有的activity,再启动登录页activity,切到后台再切回app销毁所有activity的时候task也被销毁了(猜测没有切到后台的情况是没有销毁task的)解决办法:不再循环销毁所有activity,而是在启动登录页activity的时候添加下面的flag,要有Intent.FLAG_ACTIVITY_NEW_TASK才会生效 ARouter.getInstance() .build("/app/LoginActivit
2021-12-07 17:59:04
625
原创 RecyclerView滑动到指定位置position
//查看recyclerview的smoothScrollToPosition源码可知道在调用smoothScrollToPosition之前需要先设置LayoutManage recyclerView.layoutManager = LinearLayoutManager(this) //需要添加延迟才有滑动效果 LoyoUIThread.runAfterDelay({ rec...
2021-11-29 14:16:13
2106
原创 解决PopupWindow弹出之后点击外部的触发显示弹框区域,弹框会先取消显示再弹出
为Popwindow添加触摸回调 //设置触摸拦截事件,如果返回true表示拦截,不继续往下传递 showHelpTextPopWindow.setTouchInterceptor(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { //
2021-11-25 14:01:22
754
原创 github使用中遇到的问题
目录push代码的时候报:remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.向github push数据,出现错误Failed to connect to github.com port 443: Operation timed outpush代码的时候报:remote: Support for passwor
2021-11-25 10:25:01
2007
原创 Webview相关
//是否可以退回浏览器历史记录if (webView.canGoBack()) { //回退浏览器上一记录 webView.goBack()} else { //关闭当前activity finish()}
2021-11-18 10:28:56
894
原创 android studio4.0 通过run打包,发给测试发现有些手机启动时就闪退,报Didn‘t find class on path: DexPathList
使用build APK重新打包测试发现这种打包方式就不会出现闪退问题
2021-07-27 11:47:44
178
原创 AppBarLayout和CollapsingToolbarLayout的头布局自动收起
想要的效果:点击按钮之前:点击按钮之后:答:使用setExpanded设置是否展开appBarLayout.setExpanded(false)
2021-05-11 16:11:13
561
原创 popwindow中有EditText,弹出软件盘和软件盘弹出后界面的兼容问题
遇到的问题软件盘无法弹出答:设置popwindow的isFocusable为true,popwindow应获取焦点。但是设置为true之后点击其他可以弹出popwindow的按钮,不会直接弹出其他popwindow,而是先取消显示当前popwindow,再次点击才会显示其他popwindow。filterPopWindow.isFocusable = true软件盘弹出后,有的手机popwindow上移,有些手机popwindow位置高度不变,内容也不上移,导致popwindow部分内容被挡
2021-05-11 15:50:44
287
原创 3层viewpager嵌套问题
1.第一层viewpager不能预加载(自定义viewpager修改其DEFAULT_OFFSCREEN_PAGES=0)2.tablayout和viewpager关联之后,tag和fragment没有对应上,tag感觉变多了。(子viewpager的adapter需要使用fragment.childFragmentManager)3.解决嵌套viewpager的滑动冲突问题。4.子viewpager滑到第一页或是最后一页继续滑动,要做成不能滑动,而不是出发父viewpager的滑动。...
2021-05-11 13:56:25
475
1
原创 app debug版正常运行,release版点开app就闪退
查看libs里面:发现arm64-v8a没有在app的build.gradle中定义解决办法:在app的build.gradle中的defaultConfig中加上arm64-v8a ndk { abiFilters "armeabi","armeabi-v7a", "x86","x86_64","arm64-v8a" }知识点:Android 设备的CPU类型(通常称为”ABIs”)armeabiv-v7a: 第7代及以上的 ARM 处理
2021-03-17 20:36:41
911
原创 xrecyclerview的loadmore的加载样式修改
查看了xrecyclerview的源码,loadmore的加载样式是LoadingMoreFooter实现的。LoadingMoreFooter中没有给出修改的方法。那么只有将recyclerview项目导为module,修改其源码。导入module到项目指定文件夹中:1.在项目的根目录下创建文件夹(例如:third)2.正常导入module,路径为根目录下3.在文件管理中将导入的module的文件夹拖到third文件夹下4.修改项目的setting.gradlesetting.gradle例
2021-02-03 17:38:20
356
原创 为知乎图片选择器Matisse适配Android11的分区存储
知乎的Matisse没有适配Android 10和Android 11。Android 10和Android 11启用了分区存储,Android10 在AndroidManifest.xml的Android标签内设置android:requestLegacyExternalStorage="true"后才可以访问沙盒路径下的文件。Android 11已经强制启用分区存储啦,所以需要进行适配。Android10不在AndroidManifest.xml的Android标签内设置android:reques
2021-01-14 16:40:48
1924
2
原创 限制TextView文本最多5行,多余5行显示展开收起按钮
定义TextView的时候设置最大行数: <TextView android:id="@+id/tvChangeBefore“ android:layout_width="match_parent" android:layout_height="wrap_content" android:maxLines="5" />设置完.
2021-01-13 11:37:45
828
原创 TextView为<strong>标签之间的文本设置颜色
将<strong>标签替换成<font><font color=“value”>值描述color_name规定颜色值为颜色名称的文本颜色(比如 “red” )hex_number规定颜色值为十六进制值的文本颜色(比如 “#ff0000”,这里不能包含透明度,否则不会有颜色)rgb_number规定颜色值为 rgb 代码的文本颜色(比如 “rgb(255,0,0)”)tvChangeBefore.text=Html.fromH
2021-01-13 11:12:32
1400
原创 实现美团首页滑动效果
<?xml version="1.0" encoding="utf-8"?><androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent".
2020-12-28 16:31:15
1222
原创 .9图遇到的问题
ui设计师提供的切图如上图所示,我需要用它来实现选项选中的效果,下面是我遇到的问题:1.我制作的.9图,各边不一样粗。原因:因为我没有设置好拉升的区域,边包含在拉升区域中,拉升了就变细了。2.ui设计师提供的切图只有边框,没有里面的背景,导致TextView设置的值没有显示。3.貌似.9图只能拉升不能缩小。...
2020-12-24 17:52:49
432
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人