
android基础知识
文章平均质量分 55
android基础知识
龚礼鹏
更多免费垃圾内容见微信公众号:龚礼鹏。Android应用架构师、AndroidFramework工程师、OpenHarmony应用开发工程师、OpenHarmony Framework工程师、flutter开发工程师,擅长用java、kotlin、arkts、c++、dart写hello world
展开
-
Android应用Java开发规范
【推荐】循环体中的语句要考量性能,以下操作尽量移至循环体外处理,如定义对象、变量、获取数据 库连接,进行不必要的 try-catch 操作(这个 try-catch 是否可以移至循环体外),if else等。【不推荐】线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方 式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。.【强制】判断所有集合内部的元素是否为空,使用 isEmpty() 方法,而不是 size() == 0 的方式。原创 2024-03-14 16:29:19 · 966 阅读 · 0 评论 -
android跳转到Settings中各个界面的方式
【代码】android跳转到Settings中各个界面的方式。原创 2023-09-13 22:11:26 · 2114 阅读 · 0 评论 -
AndroidStudio xml布局文件输入没有提示
方法1:修改compileSdkVersion低于33即可,不建议。原因是老的AndroidStudio与新的sdk版本不一致。方法2:升级AndroidStudio版本,建议。如下是我的AndroidStudio可行的版本。原创 2023-06-27 19:08:39 · 3154 阅读 · 0 评论 -
sim卡号获取不完整解决方案
val tm = context.getSystemService(Context.TELEPHONY_SERVICE) as? TelephonyManager ?: return "null"var sim = tm.simSerialNumber ?: "null"如上所示方法获取sim卡号是获取不到的,需要下面的方法,原因请看源码,这里不做解析了...原创 2020-03-30 19:17:53 · 2187 阅读 · 1 评论 -
kotlin 基础知识1 继承与构造函数、接口、修饰符、数据类和单例类、集合、lambda表达式、判空
1.继承与构造函数①.如果类需要被继承,则需要在类前面添加open关键字,因为kotlin的设计就是让其最好是不可变的,类似变量推荐使用val。如下:open class Person{ ...}②.kotlin分为主构造函数和次构造函数,主构造函数没有函数体,用init初始化。次构造函数通过constructor,kotlin提供了给函数参数设定默认值的功能,基本上代替了...原创 2020-04-21 14:13:44 · 359 阅读 · 0 评论 -
第一章 多线程基础
1.1线程的优雅关闭1.1.1 stop()和destory函数不能关闭线程1.1.2 线程分为守护线程和非守护线程守护线程:①.在main()函数执行完成后守护线程自动退出;②.守护线程不影响jvm虚拟机的退出需要在t.start()前面添加t.setDeamon(true)方式设置为守护线程典型案例:gc回收线程就是守护线程。非守护线程:在main()函数执行完成后不退出,只有自己线程执行完成才退出;②.非守护线程必须全部退出了jvm虚拟机才退出。1.1.3 设置状态标志位原创 2020-07-07 23:48:54 · 360 阅读 · 1 评论 -
Jetpack LifeCycle基本使用及原理解析
1.LifeCycle的诞生①.解耦,创建可感知的生命周期组件。②.降低内存泄漏发生的可能性。2.使用LifeCycle解耦页面与组件 2.1 案例分析 假设有这样一个需求,当用户打开界面即获取定位位置,通常写法是在Activity中各个声明周期进行相应的地理位置操作。使地理位置这个操作和Activity中的生命周期密不可分,耦合严重。 2.2 LifeCycle的原理 Jetpack提供两个类:LifecycleOwner(被观察者)和LifecycleObse...原创 2020-08-31 00:51:19 · 337 阅读 · 0 评论 -
Jetpack ViewModel
一.视图与数据模型之间的桥梁ViewModel二.ViewModel的生命周期特性ViewModel独立于配置变化的(不受横竖屏切换影响),只有当Activity完全销毁才会调用ViewModel的onCleared方法结束ViewModel的生命周期,如下图:三.ViewModel基本用法见后面的LiveData一起使用了四. ViewModel的原理1.在页面通过ViewModelProvider类实例化ViewModel。MyViewModel ...原创 2020-08-31 23:03:22 · 246 阅读 · 0 评论 -
Jetpack LiveData
一. 实时数据LiveData LiveData是可观察的数据容器类(将数据包裹起来的容器类)二. LiveData和ViewModel的关系 ViewModel用于存储页面中的数据,LiveData作用是在ViewModel中的数据发生变化时通知页面。三. LiveData的基本用法 ...原创 2021-04-21 00:11:12 · 114 阅读 · 0 评论 -
android studio profiler 内存分析用法
详细见android官网:https://developer.android.google.cn/studio/profile/memory-profiler?hl=zh_cn原创 2020-08-05 20:20:28 · 876 阅读 · 0 评论 -
git fork项目后出现如下错误D:\androidsdk\build-tools\29.0.3\aidl.exe‘‘ finished with non-zero exit value 1
git fork项目后出现如下错误D:\androidsdk\build-tools\29.0.3\aidl.exe'' finished with non-zero exit value 1解决方案:fork的项目要与原本项目同一目录层级,不然会报错原创 2020-07-09 19:35:51 · 856 阅读 · 0 评论 -
探究 jetpack ViewModel、lifecycles、LiveData
简介:jetpack是一个开发组件工具集,它的主要目的的帮助我们编写出更加简洁的代码,并简化我们的开发过程一.ViewModel:专门用来存放与界面相关的数据ViewModel生命周期比Activity长/** * 基础的viewModel 用于处理数据和将数据返回给ui层 */class MainViewModel(count:Int) : ViewModel() { ...原创 2020-07-13 23:31:34 · 318 阅读 · 0 评论 -
kotlin 使用协程编写高效的并发程序
一.协程基本用法1.协程:协程允许我们在单线程模式下模拟多线程编程效果,代码执行时的挂起与恢复完全由编程语言控制,和操作系统无关。//GlobalScope 是顶层协议,当前应用程序结束协程跟着结束fun main(){ GlobalScope.launch { println("codes run is coroutine scope") }}/...原创 2020-04-23 11:49:01 · 1421 阅读 · 0 评论 -
kotlin 泛型的高级特性
1.泛型实化前言:java和kotlin都是类型擦除机制,泛型只是对于编译器的类型的约束,运行期是识别不出来我们代码中指定的泛型类型的。所以肯定实现不了 a is T 或者 T::class.java泛型实化:利用内联函数和reified关键字可以进行泛型实化例如:inline fun <reified T> getGenricType() = T::class.jav.........原创 2020-04-22 22:53:30 · 363 阅读 · 0 评论 -
kotlin infix函数
infix函数作用:将函数调用的语法修改了一下比如:A to B 等于 A.to(B)实现方式:在函数前面加上infix即可限制条件:1.不能是顶层函数;2.参数只能有一个例子:infix fun String.beginsWith(p:String) = startsWith(p)...原创 2020-04-22 21:47:53 · 478 阅读 · 0 评论 -
kotlin 泛型和委托
1.泛型泛型允许我们不指定具体类型的情况下进行编程泛型的两种定义方式:泛型类,泛型方法//泛型类class MyClass<T> { fun method(param: T): T { return param }}//泛型方法fun <T> method(param: T): T { return...原创 2020-04-22 17:04:31 · 1323 阅读 · 0 评论 -
kotlin 高阶函数、内联函数
1.高阶函数定义:一个函数接收另一个函数作为参数,或者返回值的类型是另一个参数,那么该函数就称为高阶函数。基本格式如下:fun example(func:(String,Int)->Unit){ func("holle",123)}例子: fun plus(num1: Int, num2: Int) = num1 + num2 fun min...原创 2020-04-22 15:30:21 · 851 阅读 · 1 评论 -
kotlin lateinit延迟加载
1.lateinit延迟加载:告诉kotlin编译器会晚些对这些变量进行初始化。可以通过!::adapter.isInitialized进行判断是否加载。lateinit var adapter:MsgAdapter2.密封类优化代码密封类:解决为了满足编译器要求而编写的无用的代码分支,也防止出现新的分支然后直接报错的问题。interface Resultclass ...原创 2020-04-22 11:48:33 · 1004 阅读 · 0 评论 -
android 界面注意点
1.Button中的text是自动会转换成大写,如果不想要可以加上android:textAllCaps="false"属性2.主流屏幕分辨率适配xxhdpi原创 2020-04-22 11:25:19 · 168 阅读 · 0 评论 -
kotlin 标准函数和静态方法 with、run、apply
一.标准函数1.with函数with函数接受两个参数,第一个是任意类型的对象,第二个是lambda表达式。作用:连续调用同一对象的多个方法。返回值是最后一个值格式如下:val result = with(obj){ // 这里是obj的上下文 "value" // with函数的返回值}举个例子:// val list = li...原创 2020-04-22 11:21:56 · 343 阅读 · 0 评论 -
android studio 添加ndk工程步骤
1.androidstudiosdk下载插件原创 2020-07-20 22:42:31 · 490 阅读 · 0 评论 -
android 基础知识 容易忽略的知识点
一.R.java文件1.自动生成的R.java文件由AAPT工具生成,每个资源都对应R类的一个内部类,每个具体的资源项都对应内部类的一个public static final int类型的字段。二.签名1.android项目是以包名作为唯一标识,如果在同一台手机上安装两个包名相同的应用,后面安装的应用就可以覆盖前面安装的应用。2.签名可以让两个不同签名的apk不会被替换,但是手机里...原创 2020-03-15 18:19:11 · 214 阅读 · 0 评论 -
flutter 出现下面问题解决方案 was called before SelectCabinetState.initState() completed
Another exception was thrown: dependOnInheritedWidgetOfExactType<_LocalizationsScope>() or dependOnInheritedElement() was called before SelectCabinetState.initState() completed.如上的意思是:引发了另一个...原创 2020-03-07 10:13:26 · 4116 阅读 · 0 评论 -
apk 8.0版本安装
注意android 8.0及以上必须手动打开未知来源才能安装成功原创 2020-01-17 17:40:21 · 355 阅读 · 0 评论 -
android 混淆
以下内容转自https://www.jianshu.com/p/b5b2a5dfaaf4由于本人一直用csdn,所以直接将作者内容复制下来的,如果大家支持点赞请支持上面的那个地址作者开启混淆 通常我们需要找到项目路径下app目录下的build.gradle文件 找到minifyEnabled这个配置,然后设置为true即可. 如下: release{...转载 2020-01-06 15:59:35 · 234 阅读 · 0 评论 -
android debug包没有问题 release包有问题 org.greenrobot.eventbus.EventBusException: Subscriber class com.--Ac
报错如下:org.greenrobot.eventbus.EventBusException: Subscriber class com.--Activity and its super classes ...如上问题需要在混淆文件规则(proguard-rules.pro)添加如下配置即可:-keepattributes *Annotation*-keepclassmembers c...原创 2020-01-06 15:00:25 · 701 阅读 · 0 评论 -
flutter 多次重复关闭dialog界面出现白屏问题 Looking up a deactivated widget‘s ancestor is unsafe. At this point
flutter多次重复关闭dialog,然后出现白屏问题,报错如下:[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: Looking up a deactivated widget's ancestor is unsafe. At this point the state of the widget's ...原创 2020-01-03 18:05:59 · 8749 阅读 · 0 评论 -
showModalBottomSheet 中的setstate没有效果
showModalBottomSheet不能实时更新数据,setstate没有效果,原因是:setstate还是整个页面的刷新,不是showModalBottomSheet中的刷新,所以需要在showModalBottomSheet中重新定义刷新方法,然后调用此方法刷新即可,如下所示:需要在showModalBottomSheet内部,布局外部添加一层StatefulBuilder,...原创 2019-12-27 10:31:59 · 2672 阅读 · 0 评论 -
flutter 让TextFeild可以根据输入法上移
1.需要保证TextFeild可以滑动,不然滑动不了2.需要获取输入法高度,然后包裹TextFeild的布局高度需要减去输入法高度Scaffold( body: Stack( children: <Widget>[ Column( children: <Widget>[ ...原创 2019-12-26 18:55:04 · 3028 阅读 · 0 评论 -
android 添加flutter module模式 最新 解决找不到io.face.flutter 包问题
网上很多代码说添加以module模式添加flutter的方式都是过时了,会找不到类,如下:public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(sav...原创 2019-12-19 19:07:18 · 4047 阅读 · 6 评论 -
flutter 黑屏问题
android端集成flutter添加下面代码会产生黑屏,以下代码是为了切换状态栏的透明度的:private fun makeStatusBarTransparent(activity: Activity) { val window = activity.window if (Build.VERSION.SDK_INT >= Build.VERSIO...原创 2019-12-19 18:55:38 · 3355 阅读 · 0 评论 -
android 项目迁移然后运行不起来 爆错> Task :app:processDebugResources FAILED
Executing tasks: [clean, :flutter:assembleDebug, :app:assembleDebug]> Task :clean UP-TO-DATE> Task :app:clean> Task :flutter:clean> Task :flutter:compileFlutterBuildDebugArm&g...原创 2019-12-14 16:06:27 · 7065 阅读 · 0 评论 -
Android java.lang.RuntimeException: Parcelable encountered IOException writing serializable object
Android java.lang.RuntimeException: Parcelable encountered IOException writing serializable object爆上面错误可能是当前的类没有序列化serializable注意:如果当前的类序列化了一定要检查当前的子类是否序列化我这报错就是子类未序列化导致的!!!...原创 2019-12-06 17:35:14 · 288 阅读 · 0 评论 -
flutter RangError:Value not in range :-1 release版本的context和debug版本的context不一样
debug版本不会报错,release版本报错:RangError:Value not in range注意上面代码在debug模式下没有问题,在release模式下有问题,_contextBaseFunction就是context,然后在release模式下它的toString是没有“(”的,在debug模式下有括号并且显示后面的内容,可能是debug模式下需要显示更多信息,所以上述...原创 2019-12-05 16:52:33 · 2219 阅读 · 0 评论 -
根据不同的包完成不同的逻辑,buildConfigField使用方式
如上所示根据不同的包可以生成不同的type类型,可以在buildConfig中查看:然后在代码中根据BuildConfig.type就可以完成类型区分。原创 2019-11-30 16:36:24 · 458 阅读 · 0 评论 -
flutter TextField长按或者双击报错 InputDecoration flutter: Another exception was thrown: NoSuchMethodError:
InputDecoration flutter: Another exception was thrown: NoSuchMethodError: The getter 'cutButtonLabel' was called on null.如上所示错误是剪切板控件有问题,我这边解决方式是直接禁用剪切板,如下所示:在TextField的内部添加:enableInteractiveSe...原创 2019-11-26 19:42:24 · 2654 阅读 · 1 评论 -
flutter 报错‘_dependents.isEmpty‘: is not true.
如上的几种写法都是会爆'_dependents.isEmpty': is not true.错误解决方式如下图:如上所示写法就不会报错,结论是如果界面参数需要truefalse判断的需要直接写值,不能间接的判断。...原创 2019-11-25 19:12:55 · 5743 阅读 · 0 评论 -
flutter context中报错 To safely refer to a widget‘s ancestor in its dispose() method, save a reference
fluttercontext报错如下:To safely refer to a widget's ancestor in its dispose() method, save a reference to the ancestor by calling inheritFromWidgetOfExactType() in the widget's didChangeDependencies()...原创 2019-11-25 11:37:42 · 12353 阅读 · 0 评论 -
flutter android canLuanch可以进行判断 ios上canLuanch不可以进行判断
背景:url_launcher是一个包,支持跳转其他app,canLuanch判断是否跳转问题:canLuanch判断有此应用时在android上面可以判断为true并跳转,在ios上面判断为false,但是如若直接注销了canLuanch,用launch直接调用也可以跳转,代码如下所示,androidios一样:if (await canLaunch(url)) { la...原创 2019-11-20 18:49:27 · 924 阅读 · 0 评论 -
flutter 请求超时回调
注意flutter的rxdart请求超时回调不在onError里面需要在请求地方添加timeout,超时回调会在此处,如下图:RequestMap.requestNotPayOrder(context) .timeout(Duration(seconds: Utils.getConnectTime()), onTimeout: (sink) { ShowL...原创 2019-11-19 20:57:53 · 7467 阅读 · 0 评论