
Android
文章平均质量分 52
Android的基础知识和开发中遇到的知识点,每周一更,看完肯定会有收获
_火焰猫
这个作者很懒,什么都没留下…
展开
-
Android/Java中线程池详解
参考文章:http://gityuan.com/2016/01/16/thread-pool/https://blog.youkuaiyun.com/pozmckaoddb/article/details/51478017前言在我们平时的工作或者课堂的学习中,对于开一个子线程常见到如下写法:Thread thread = new Thread(new Runnable() { @Override public void run() { ...原创 2021-10-31 11:34:53 · 1727 阅读 · 1 评论 -
Runnable,Callable,Future,FutureTask的区别
Runnable,Callable,Future,FutureTask的区别:参考:https://baijiahao.baidu.com/s?id=1631326488605078999&wfr=spider&for=pc一般创建线程的方法:继承Thread,实现Runnable这两种都没有返回值,一般需要用到Handler去发送结果然后处理;在这两种传统方法中,推荐Runnable,因为Thread只能继承,Java只有单继承,而Runnable是通过接口;并且在线程池中,Ru原创 2021-10-24 12:02:15 · 451 阅读 · 0 评论 -
字节跳动Android春招一面
字节跳动Android面试 四大引用,软引用什么时候使用? 强引用:具有强引用就不会被垃圾回收器回收,即使内存空间不足,抛出异常也不会回收;除非其在生命周期已经过了或者显示地将其设置为null; 软引用:SoftReference,通过get来获取对象,在jvm内存不足的时候会被回收;用来实现内存敏感的高速缓存,如网页缓存,图片缓存等,一旦SoftReference保存了对一个java对象的软引用猴,在回收前,get方法提供的是该对象的强引用,回收之后,get返回null; 弱引用:Wea原创 2021-04-25 12:39:57 · 398 阅读 · 0 评论 -
java的反射
反射的作用在运行时判定任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判定任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;工具类这里给大家提供一个反射工具类,里面的方法都有注释常用的就是四个方法public class ReflectionHelper { /** * 传入类名去返回一个对应的Class * @param className * @return */ public static Class原创 2021-02-02 20:06:44 · 155 阅读 · 0 评论 -
正则表达式
测试网址:https://regex101.com/参考视频:参考视频网站? : 表示前一个字符可以出现0次或1次如a?可以匹配啊a,空格* : 表示前一个字符可以出现0次到多次a*会匹配a,aaa,空格+ : 会匹配出现1次以上的字符a+会匹配a,aa{} : 表示出现的返回{6} 表示前一个字符出现6次{2,6} 表示前一个字符出现2到6次{2,} 表示前一个字符出现2次以上() : 匹配多个字符(ab)+ : 匹配ab出现一次以上的字符;| : 或运原创 2021-02-02 11:57:53 · 270 阅读 · 0 评论 -
Android常见公有方法(隐藏虚拟按键/隐藏软键盘/获取屏幕宽高等)
隐藏虚拟按键,并且全屏使用:ScreenUtils.hideBottomUIMenu(getWindow().getDecorView()); /** * 隐藏虚拟按键,并且全屏 */ public static void hideBottomUIMenu(View view) { //隐藏虚拟按键,并且全屏 if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT原创 2021-02-01 17:40:44 · 2511 阅读 · 1 评论 -
点击事件是否在view内部
//获取的是距离屏幕左侧的x和yif (isPointInView(popupView, (int) motionEvent.getRawX(), (int) motionEvent.getRawY())) {private boolean isPointInView(View view, int x, int y) {int[] location = new int[2];//获取view的坐标并赋值给location数组view.getLocationOnScreen(locatio原创 2021-01-31 16:26:23 · 209 阅读 · 0 评论 -
Android中的接口的使用举例
这里讲解了两种大家可以在学习Android中容易对接口迷茫的两种用法1.用于回调我们会在子线程中执行耗时操作,就可以用接口进行耗时操作结果的回调;首先定义一个接口public interface OnNetInfoCallback { //获取信息成功 void onSuccess(String info); //获取信息失败 void onFailure();}在该类中我们进行模拟耗时操作,用接口进行结果的回调可以看到在该类中的getInfo方.原创 2020-11-21 20:54:11 · 3229 阅读 · 5 评论 -
自定义View和自定义ViewGroup实例讲解
参考:https://www.jianshu.com/p/c84693096e41自定义View定义一个自定义View的步骤:1.需要继承View或者View的子类;2.重写至少两个构造方法;3.自定义xml中的属性;declare-styleable中的format的类型:reference:引用类型,如@drawable/xxxcolor:颜色,如#fff000dimension:尺寸,如11dp其他的:float,integer,boolean,string原创 2020-11-09 20:05:25 · 328 阅读 · 0 评论 -
武汉游戏公司android面试
Android实习生面试,有三轮技术面第一轮:Handler的原理第二轮:RecyclerView中Recycler的原理hashMap的数据结构,是否线程安全http协议的了解SharePreferences的原理扔鸡蛋问题第三轮重明数扔石头问题...原创 2020-10-29 10:34:08 · 1073 阅读 · 5 评论 -
Android 使用PopupWindow做一个弹窗(kotlin版)
运行结果先介绍一些参数contentView : 用于设置相应的布局animationStyle: 用于设置进入和退出的动画isOutsideTouchable :点击外侧是否可以关闭弹窗(这这里因为我们设置了全屏所以没有设置这个)isClippingEnabled 是否可以铺满屏幕(false为可以铺满,包括状态栏和导航栏)具体来举个栗子说明/** * @Anthor:Tian * @Date:2020/10/5 * @Description:弹窗 */cl..原创 2020-10-06 12:18:35 · 4047 阅读 · 4 评论 -
Android 防止双击(kotlin)
这个在项目中用得非常多,因为那些测试人员非常喜欢在测试的时候多次点击同一个按钮看看有没有什么bug所以写点击事件的时候尽量都用这个/** * @Anthor:Tian * @Date:2020/10/5 * @Description:防止双击 */abstract class NoDoubleClickListener : View.OnClickListener { companion object { const val MIN_CLICK_DELAY_TIM原创 2020-10-05 15:41:33 · 1845 阅读 · 1 评论 -
Android中EditText的filter过滤(kotlin版)
最近写文字老是用kotlin是因为用了kotlin再也不想用java了这里写了一个用于过滤空格和换行的,其中注释说明了每一个参数的意义class SpaceAndLineInputFilter : InputFilter { override fun filter( source: CharSequence?,//即将要输入的字符串 start: Int,//source的start end: Int,//source的end .原创 2020-10-05 11:36:31 · 2329 阅读 · 3 评论 -
Android关闭软键盘的方法
需要两个参数 :BaseApplication.app 这个是全局的上下文et_person_info 这个是当前页面的EditText ,因为只有EditText才会调用键盘java写法InputMethodManager imm = (InputMethodManager) BaseApplication.app .getSystemSe.原创 2020-10-04 16:22:04 · 3087 阅读 · 0 评论 -
Android快速知道自己在哪个页面
当在一个大型项目中时,如果想要知道自己当前APP运行在哪一个页面可以这样写:在所有Activity的基类BaseActivity的Oncreate()中:Log.e("页面", getClass().getSimpleName());这样通过logcat就很快知道自己在哪个页面了...原创 2020-09-28 11:06:18 · 729 阅读 · 0 评论 -
Android中代码动态修改控件属性
修改字体的粗细tipTextView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));//加粗 tipTextView.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));//常规设置字体的颜色leftTextView.setTextColor(context.getResources().getColor(R.color.black_191919));设原创 2020-09-17 19:40:58 · 3461 阅读 · 1 评论 -
Kotlin语法总结3
参考:第一行代码第三版协程可以理解为一种轻量级的线程,让我们可以使用编程实现不同协程之间的切换,使得高并发程序的运行效率得到极大的提升;依赖: implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.0" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1"开启协程的几种方式:1.使用Global.launc.原创 2020-09-13 20:19:39 · 409 阅读 · 1 评论 -
Rxjava2笔记2
笔记1:https://blog.youkuaiyun.com/qq873044564/article/details/108073746基本相应类型Observable:最基本的响应类型,不支持背压背压是什么背压就是上游发送数据的速度很快,下游没有来得及处理,就会累积很多数据;在高并发的时候会发生背压Observable.create(new ObservableOnSubscribe<String>() { @Override pub原创 2020-08-22 17:17:45 · 341 阅读 · 1 评论 -
kotlin语法总结2
参考:第一行代码第三版标准函数with,run,applywith:接受两个参数,第一个参数是对象,第二个参数是一个Lambda表达式,默认对第一个参数进行操作,并把最后一行作为返回值如下代码中,在{}中都是默认对StringBuilder进行操作val fruitList = listOf("Apple", "banana", "Orange") val result = with(StringBuilder()) { append("Start eating .原创 2020-09-10 19:08:10 · 455 阅读 · 1 评论 -
Rxjava2的笔记1 --操作符
implementation 'io.reactivex.rxjava2:rxjava:2.2.6' implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'创建操作符create :创建操作符,创建最简单的事件流其中Consumer为自定义观察者方法,不必全部实现观察者所有方法,此accept对应onNext()方法Observable.create(new ObservableOnSubscribe<Integer...原创 2020-08-21 12:27:02 · 393 阅读 · 0 评论 -
视频,图片,字符测试数据
测试的时候经常用到视频,图片和字符等/** * @Anthor:Tian * @Date:2020/8/14 * @Description: */public class UrlUtil { public static String[] videoUrls = { "https://v-cdn.zjol.com.cn/280443.mp4", "https://v-cdn.zj.原创 2020-08-14 15:45:35 · 288 阅读 · 0 评论 -
安卓中Rxjava的使用举例:请求一个网络图片
参考学习:https://www.bilibili.com/video/BV1AD4y1D7X1?from=search&seid=12155248327851699054添加依赖: implementation 'io.reactivex.rxjava3:rxandroid:3.0.0' implementation 'io.reactivex.rxjava3:rxjava:3.0.0'在build.gradle的Android中compileOptions {原创 2020-08-10 15:08:09 · 306 阅读 · 0 评论 -
安卓GreenDao基本使用
配置参考github官方https://github.com/greenrobot/greenDAO不过发现配置似乎需要翻墙首先在build.gradle repositories { google() jcenter() mavenCentral() // add repository } classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0'在build.gradle(原创 2020-08-09 21:03:31 · 589 阅读 · 0 评论 -
安卓获取全局Context和Handler
public class BaseApplication extends Application { private static Context sContext = null; private static Handler sHandler = null; @Override public void onCreate() { super.onCreate(); sContext = getBaseContext(); sH.原创 2020-08-08 20:40:04 · 858 阅读 · 0 评论 -
安卓自定义Dialog设置自动消失
是上面检查是否连网的这个弹窗<style name="Dialog" parent="@style/Base.V7.Theme.AppCompat.Light.Dialog"> <!--背景透明--> <item name="android:windowBackground">@android:color/transparent</item> <!-- 不允许对话框的背景变暗 --> .原创 2020-08-08 20:14:05 · 957 阅读 · 0 评论 -
安卓中对BaseMultiItemQuickAdapter的继承实现不同网络状态下的页面
大家如果用过BRVAH就知道setEmptyView这个方法不仅能用来设置空状态,还可以用它来设置加载中和加载失败的状态,所以我们需要去写一个BaseAdapter去判断一下状态,然后在不同的状态下去实现不同的页面首先要写一个页面用来控制不同不同状态的显示,也就是用一个页面就可以解决不同状态的显示效果,起始状态都为gone<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://sc...原创 2020-08-08 18:46:37 · 627 阅读 · 0 评论 -
安卓TextView中的Span常用方法总结
目录封装类基本用法举例封装类自己去封装了一个,以后用起来方便一些import android.text.SpannableStringBuilder;import android.text.Spanned;import android.text.style.AbsoluteSizeSpan;import android.text.style.BackgroundColorSpan;import android.text.style.BulletSpan;import a.原创 2020-08-08 18:07:27 · 2602 阅读 · 1 评论 -
安卓中的补间动画和属性动画的基本操作
普通动画和属性动画的区别:1.用法更简便 2.改变了事件,也就是真正改变了属性,如view的位置透明度变化1.普通动画其中repeatCount为循环多少次,infinite为无限循环<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <alpha android:fromAlp原创 2020-08-07 19:59:13 · 262 阅读 · 0 评论 -
ConstraintLayout的一个例子
一般项目中要在最外层里面套一个ConstraintLayout,然后设置成9:16的宽高比,然后控制比例的话是使用Guideline去划分比例<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xm...原创 2020-08-05 21:41:38 · 315 阅读 · 0 评论 -
RecyclerView中GridLayoutManager控制每一行的不同的列数
比如我要实现第一行是一列,第二行是两列这里的每一列的个数是由你设置的spanCount / return 的数决定的 GridLayoutManager llm = new GridLayoutManager(getContext(), 2); //count/size=item数量 llm.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override .原创 2020-08-05 21:21:24 · 7546 阅读 · 1 评论 -
使用EasyRefreshLayout快速实现下拉刷新和上滑加载
添加依赖implementation 'com.github.anzaizai:EasyRefreshLayout:1.3.1'在RecyclerView外面套一层 <com.ajguan.library.EasyRefreshLayout android:id="@+id/erl_success_view" android:layout_width="match_parent" android:layout_height="matc..原创 2020-08-05 21:05:15 · 687 阅读 · 0 评论 -
BRVAH的基本使用
最近实现多种布局运用到了BRVAH使用步骤,首先给item继承一个public class StudyRoom implements MultiItemEntity{ private int itemType = 0; public static final int TYPE_NORMAL = 0;//添加一些类型数值 //...成员属性 @Override public int getItemType() { //在这里控制原创 2020-08-05 20:58:30 · 1548 阅读 · 3 评论 -
安卓开发中Glide的基本使用
添加依赖implementation 'com.github.bumptech.glide:glide:4.4.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.4.0'最基础的,如果涉及到网络的话记得添加网络权限Glide.with(BaseApplication.getContext()).load(url).into(imageView);添加OptionsGlide.with(BaseAppli原创 2020-08-05 20:25:29 · 1699 阅读 · 0 评论 -
RecyclerView中的Item无法填充满的问题
参考了https://blog.youkuaiyun.com/chenliguan/article/details/82314122在Adapter中你可能用了这个 View view1 = View.inflate(context, R.layout.room_item, null);解决:改为这个View view = LayoutInflater.from(context).inflate(R.layout.room_item,parent,false);问题:这两个之间有什么区别和联系原创 2020-07-31 15:28:38 · 754 阅读 · 3 评论 -
Dialog模式的Activity
效果图:就是一个对话框样式的activity,背景为半透明,所以之前的activity还可以看到 android:theme="@style/DialogActivity"styles里面添加一个 <style name="DialogActivity" parent="@style/Theme.AppCompat.Dialog"> <item name="android:windowBackground">@android:color/tran.原创 2020-07-29 19:50:21 · 2029 阅读 · 0 评论 -
Android多线程知识总结
参考安卓进阶之光第四章进程和线程的关系进程是系统资源分配的最小单位,线程的系统调度的最小单位; 进程之间不能共享资源,线程之间可以共享所在进程的地址空间和资源; 一个进程中可以有多个线程,一个线程只能属于一个进程; 进程可以开启线程和其他进程; 线程都拥有各自的计数器,堆栈和局部变量等属性;为什么使用多线程可以把某一个耗时操作分配到一个单独的线程中去执行,减少程序响应时间; 线程创建和切换开销小,多线程在数据共享方面效率很高; 简化程序结构,使程序便于理解和维护;线程的6种状态原创 2020-07-23 12:39:54 · 361 阅读 · 0 评论 -
Android关于活动的生命周期的面试题
1.从Activity A跳到Activity B调用的生命周期,然后再点击返回首先Activity A显示:跳转时: 这里是易错点从Activity B返回时:依然易错在Activity A点击返回键2.横竖屏切换时的生命周期变化1.当不设置configChanges时2.当设置android:configChanges="orientation"之后安卓6.0依然会走一遍生命周期,安卓8.0就不会走一遍生命周期了3.按home键会调用什么方法(或者原创 2020-07-15 23:07:21 · 450 阅读 · 0 评论 -
View体系和自定义View总结
有四种方式去改变View的位置layout(getLeft() + disX, getTop() + disY, getRight() + disX, getBottom() + disY);//1 offsetLeftAndRight(disX); offsetTopAndBottom(disY);//2 LinearLayout.LayoutPara原创 2020-07-22 00:14:59 · 219 阅读 · 0 评论 -
安卓中px和dp的相互转换
public class DpAndPx { public static int Dp2Px(Context context,float dp){ float scale = context.getResources().getDisplayMetrics().density; return (int) (dp*scale+0.5f); } public static int Px2Dp(Context context,float px){ .原创 2020-07-13 10:17:22 · 871 阅读 · 1 评论 -
Android中的权限申请
今天给大家讲一下权限的知识在android6.0加入的运行权限,主要针对一些比较危险的权限比如常用到的相机,位置,存储功能,注意网络申请不算危险权限;下列是全部的危险权限:一共9组24个,不需要全部记住,只需要在用的时候能够想到要动态申请权限时就行:1.CALENDER(日历) : READ_CALENDAR WRITE_CALENDAR2.CAMERA (相机) : CAMERA3.CONTANTS (内容): READ_CONTANTS , WRITE_CONTANTS , GET_A原创 2020-07-10 18:57:52 · 2032 阅读 · 0 评论