andorid
文章平均质量分 87
jametang25
这个作者很懒,什么都没留下…
展开
-
【经验】LiveData使用常见问题
livedata特性和使用原创 2024-07-15 16:35:29 · 508 阅读 · 0 评论 -
Looper机制详解
前言此前有过一篇关于JAVA层Looper的介绍和MessageQueue的介绍网络上也有一篇很详细的介绍用一张图来说明looper运作的机制looper顾名思义是轮询,轮询的目的是为了查找消息队列(MessageQueue)中的消息并且处理消息(Message)。MessageQueue和Looper是一一对应的关系,一个prepare后的线程中只有一个Looper对象和以及MessageQueue,且线程独有。消息可以是来自Looper所在线程,也可以是来自其他子线程,贴一段代码解释一下原创 2022-02-23 21:11:44 · 5698 阅读 · 0 评论 -
UE中Activity优雅退出
背景UE Android lib集成过程,使用普通Activity+SurfaceView的方式加载UElib,在退出游戏Activity时,出现nativeOnInputQueueDestroyed引擎的崩溃原因InputQueue处理流程onDestroy()onInputQueueDestroy()这两个里面都可以在native层处理inputQueue,主要是 AInputQueue_detachLooper取消looper绑定然后是在native的ondestroy中设置andr原创 2022-02-17 21:12:27 · 3804 阅读 · 0 评论 -
UE4启动GameActivity
UE Android项目工程中的GameActivity基于NativeActivity,相关知识请参考之前的一篇文章,NativeActivity介绍在之前NativeActivity介绍中,我们知道胶水层app_native_app_glue会创建一个子线程并prepare()开启loop循环。UE中这个线程又叫做GameThread,用于处理游戏逻辑业务。初次之外,通过android_main()入口,在UE4引擎代码LaunchAndroid中会创建一个AndroidProcessEvents,用原创 2022-02-10 17:17:19 · 5060 阅读 · 0 评论 -
Android ABI与应用打包
基础认识1.armeabi-v7a: 第7代及以上的 ARM 处理器,很多手机还在使用。2.arm64-v8a: 第8代、64位ARM处理器,目前主流手机CPU架构。3.armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多。4.x86: 平板、模拟器用得比较多。5.x86_64: 64位的平板。目前手机基本使用的都是ARM架构,X86架构平板在使用。armeabi架构是早期使用,现在基本只用考虑v7和arm64-v8a两种。google官方文档对Android ABI架构的说明原创 2022-02-10 11:38:58 · 6814 阅读 · 0 评论 -
【NativeActivity介绍】
官方文档API介绍:https://developer.android.com/reference/android/app/NativeActivity官方Demo:https://github.com/android/ndk-samples/tree/master/native-activityNativeActivity是基于Activity的页面,有Activity的全部功能。除此之外,NativeActivity通过loadNativeCode方法实现了一套自有looper事件处理逻辑。mN原创 2022-01-28 17:01:40 · 3949 阅读 · 0 评论 -
Android笔记(18)应用层Crash处理逻辑
Android发生Crash时,说明代码执行出现异常,此时的运行时环境(RunTime)将会首先感知到问题。如果此时代码设置了try-catch,将这个运行时异常RunTimeException(更加具体的可能是NPE or 数组越界等)捕获后,将不会触发运行时环境(Runtime)触发crash机制。如果一旦没有处理,将会出现Crash!!!下面我们来探讨下应用层最终崩溃的机制RuntimeI...原创 2020-03-01 23:54:30 · 335 阅读 · 0 评论 -
Android笔记(十七)Android多线程问题
参考 https://mp.weixin.qq.com/s/gBZcogHizremZoJRvd8fHQ线程的几个方法run()。非静态start()。非静态join()。非静态。如果线程 A 调用了线程 B 的 join() 方法,那线程 A 会进入等待状态,直到线程 B 运行结束。currentThread()。静态yield()。静态。降低当前线程优先级,调用该方法就像是是对线...原创 2020-02-23 20:35:45 · 225 阅读 · 0 评论 -
JAVA基础(七) ArrayList与LinkList
ArrayMap是java中重要的数据结构,底层是基于动态数组的结构实现。包括下面几个关键特征:初始化容器大小为10没有扩容因子这一说法,或者说扩容因子大小为1。当新增加后的数据量超过容器本身时,容器将按照 oldsize + oldsize>1 的方式扩容1.5倍当一次添后的数据大于1.5倍时,使用新的容器大小动态数组查找O(1),插入O(n)...原创 2020-02-23 17:00:43 · 134 阅读 · 0 评论 -
比较Activity和Dialog的窗口添加流程
之前在我的这篇blog中写到了Activity启动时activity / window /view之间的关系。大概的流程是,先创建activity,然后attach中执行window创建,接着setContentView中创建DecorView并且将DecorView和window进行绑定,接着在resume过程中通过将decorView添加到windowManager中WindowManager...原创 2019-12-29 23:42:48 · 598 阅读 · 0 评论 -
Android Developer官网ANR分析
当主线程被阻塞太长时间时,会触发ANR(Application Not Response)。如果App正在前台运行,系统将向用户展示ANR弹框如下。ANR弹框让用户可以强制退出应用。ANR是指:因为应用主线程,也就是负责更新界面的线程,不能处理用户输入事件或者绘制,给用户造成困扰。ANR可能会在如下情况下出现:当activity处于前台时,应用在5s内不能完成输入或者广播事件当activ...翻译 2019-12-27 23:32:44 · 266 阅读 · 0 评论 -
Android笔记(十六)Activity启动
Activity启动分为两种情况Activity所在进程不存在,冷启动Activity所在进程存在于后台针对于这两种情况,我们都可以对此用一套流程来描述,针对冷启动情况,其中会添加一部分创建ActivityThread的流程 还是先上图,图片出处GitYuan 假设在图片流程之前,我们做的是点击桌面按钮操作,那么会去执行activity的startActivity操作,该方法里...原创 2018-04-15 11:14:30 · 642 阅读 · 0 评论 -
Android笔记(十五)ContentProvider源码浅析
ContentProvider作为四大组件之一,由于业务上用到的地方不多,目前业务是系统界面,属于系统应用,最适合使用ContentProvider来进行少量数据存储,我们业务中涉及到的Settings.system和Settings.Secure等数据库,就是通过ContentProvider来封装、用ContentResolver来访问的//通过ContentResolver来访问Sett...原创 2018-04-15 00:39:07 · 361 阅读 · 0 评论 -
Android笔记(十四) JAVA线程池
线程池的由来:由于业务需求,我们需要多个线程同时执行(也叫并发执行),我们会去创建多个线程来执行任务。如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。因此线程池就诞生了,线程池中的线程会在任务执行完毕后不会被立即销毁,而是被重复利用,避免创建新的线程。在java中,有专门一个类用来创建线程池并使用线...原创 2018-03-20 22:14:53 · 168 阅读 · 0 评论 -
Android笔记(十三)AsyncTask源码分析
AsyncTask,异步任务,参照源码中的一段注解:/** * <p>AsyncTask enables proper and easy use of the UI thread. This class allows you * to perform background operations and publish results on the UI thread wit...原创 2018-03-13 00:45:57 · 247 阅读 · 0 评论 -
Android笔记(十二)Volley开源库
Volley是著名的用于网络请求和图片存储显示的第三方开源库。 图片来自 简单的使用方法看这里 小结一下大概是:用Volley.java实例化一个RequestQueue再new一个请求,XXXRequest(有StringRequest,ImageRequest,JSonRequest等)将这个request添加到requestQueue中,获取数据用代码表示如下...原创 2018-03-11 11:22:23 · 181 阅读 · 0 评论 -
深入理解Android内核——Android启动分析
系统启动进程android设备的启动分为三个阶段:Boot Loader, Linux Kernel,Android 系统服务。Android系统实际上是运行在Linux Kernel之上的一系列系统服务进程。init进程是Android中被启动的第一个进程,PID = 0 。它通过解析init.rc脚本来构建出android运行初始化形态(android系统服务程序大多是在这个脚本中被启动) 系原创 2016-06-14 22:03:05 · 7785 阅读 · 1 评论 -
Android笔记(十)Android O SystemUI启动流程
我们知道systemui属于系统级应用,在开机过程中就会启动。具体来讲是在SystemServer进程中startOtherService()方法来启动的。startOtherService(){...startSystemUi(context,windowManagerf);...}startSystemUi()方法中就是做了启动SystemUIService服务的操作static fin原创 2017-10-28 11:41:10 · 2382 阅读 · 0 评论 -
Android笔记(四)DecorView & ViewRootImpl & Window
这三者之间的关系网络上有很多篇不错的blog。比如这篇。为了让自己更加熟悉View绘制的流程,在这里特意将这三者的关系好好梳理一番。 为了理清这三者的关系,还是先上一张图 ViewRootImpl是ViewRoot的实现类,ViewRoot不是view,而是整个ViewTree的管理者。DecorView是整个ViewTree的根布局视图ViewRoot通过在Activity.att...原创 2017-05-20 19:26:13 · 1222 阅读 · 2 评论 -
Android笔记(六)ANR
转一篇非常棒的文章戳这里顺便写下点分析ANR的笔记step1 Trace文件中cmd line 看group=”main” 中的blocked-wait,有些trace文件中可以直接找到ANR堆栈信息。step2 分析找不到问题所在就看event log 中的am_anr字段,找到原因所在。如果是inputevent事件没有响应就看5s前做了什么操作,类似地如果是BroadcastTimeOut转载 2017-06-14 15:34:28 · 288 阅读 · 0 评论 -
handler机制基础应用
对于handler获取message的方式有两种一种是新建一个message对象,然后给该对象赋值Messagemessage = new Message();message.what= 1;mHandler.sendmessage(message)一种是利用Pool里面的message,不必新建Messagemessage = mHandle.obtainMe原创 2015-01-26 10:20:12 · 340 阅读 · 0 评论 -
关于没有程序出错但没有提示的一种情况 listview
先上图这种原因一般是listview中的itemview为空造成的,所以我们应该查看相关的数据适配器adapter,也是就自定义的adapter,再上图看出错误了吧,就是最后return null 导致的最后出现nullpointer。所以强烈建议在以后写自定义adapter的时候先写return convertview。我已经几次这样错了,新手不懂的时候各种找不到原创 2015-06-18 16:33:45 · 401 阅读 · 0 评论 -
eclipse项目文件上的红色感叹号
在很多的项目移植过程中,会出现红色的感叹号而且几乎没有什么提示。原因:显示红色感叹号是因为jar包的路径不对解决办法:Propertise->Java Build Path,红色叉号的包为路径错误的包。删除包,或者重新给包一个合适的路径,指向相关的文件即可原创 2015-06-02 09:48:29 · 550 阅读 · 0 评论 -
Android开发设计模式之——单例模式
单例模式是设计模式中最常见也最简单的一种设计模式,保证了在程序中只有一个实例存在并且能全局的访问到。比如在android实际APP 开发中用到的 账号信息对象管理, 数据库对象(SQLiteOpenHelper)等都会用到单例模式。下面针对一些例子分析一下我们在开发过程中应用单例模式需要注意的点。一、作用单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局转载 2015-06-02 20:00:46 · 450 阅读 · 0 评论 -
Android 中几种更新UI界面的方法
android 更新UI的几种方法根据之前的项目经验,以及在网上看到的一些技术文章,将UI更新的几种方法在此做个总结: 1. 利用Android Handler机制和message消息传递 我们知道 , Android Handler机制主要用作线程之间的通信,为了易于理解,我们暂不考虑每个线程的Looper问题。UI更新一般是在主线程中完成的,而Handler就是定义在主线程中,然后通原创 2015-05-22 11:11:34 · 1760 阅读 · 0 评论 -
assets和res/raw的区别
在assets目录文件和res目录文件中,我们通常用来放置项目资源,比如图片资源,音频,切图等。其中assets文件中长用来放置较大的音频文件。回到题目来,assets和res/raw有什么区别?相同之处两者同属于静态文件,打包后会原封不动的保存在apk包中,不会被编译成二进制,也就是不会被编译到bin文件中。不同之处assetsassets目录支持任意深度的子目录。这些文件不会生成任何资源ID,必原创 2015-09-13 15:56:15 · 894 阅读 · 0 评论 -
Android 的几种数据存储方式
Android 存储方式比较多,常用的有4中存储,他们分别是SharedPreferences存储方式文件存储数据库存储ContentProvider存储SharedPreferences存储方式常常用来进行一些简单的数据本地存储,用来保存简单的配置信息。例如用户登录信息,设置的信息等等。它是基于Map键值对来进行存储的。但是使用SharedPreferences是有些限制的,只能在同一个原创 2015-09-13 17:11:59 · 431 阅读 · 0 评论 -
handler message looper机制
上周其实已经写好了关于handler messager looper机制的文章,而且已经保存了。两天后写http://blog.csdn.net/u014529755/article/details/48197923 这篇文章的时候,竟然诡异地将那篇给删了。OMG。切换到markdown模式的时候上次写的东西竟然还在,而且直接可编辑,不知道大家有没有遇到过这样的问题。 言归正传,让我们来一起讨论原创 2015-09-17 21:47:56 · 575 阅读 · 0 评论 -
Android 开发之获取相册照片和获取拍照照片
在Android的开发过程中,我们可能会读取手机里面的照片或者通过相机拍摄获取照片,这是两种常用的获取图片的方式,在做项目过程中也会经常遇到,下面来介绍一下这两种获取方式..1.从本地相册获取照片:一般就是写出这个方法[java] view plaincopyprotected void getImageFromAlbum() {转载 2016-01-03 20:34:53 · 610 阅读 · 0 评论 -
android View的相关知识点
对于android开发者来说,炫酷的界面可以给APP加分。但是由于第三方的UI有时候不符合我们的需求,这时候就需要自己写View,因此对于View绘制的基础我们还是需要掌握。 一般来说,自定义View都是继承自View,而我们通常是在Canvas画布上来绘制图形。获取Canvas主要有两种方式通过重写View.onDraw方法,View中的Canvas对象会被当做参数传递过来,我们操作这个Can原创 2016-01-24 21:27:41 · 610 阅读 · 0 评论 -
Android之图片缓存
为了避免出现OOM,在对图片进行相关处理时,常常采用图片缓存技术。图片缓存机制常用的有两种:软引用内存缓存技术在对图片进行加载显示之前,由于本来的图片太大,太占用内存空间,所以需要先进行图片压缩。以下是压缩图片的示例代码:/*** 加载内存卡图片*/ BitmapFactory.Options options = new BitmapFactory.Options();转载 2016-04-06 15:24:35 · 281 阅读 · 0 评论 -
onMeasure onLayout onDraw
对于自定义View,其绘制的基本步骤为measure(测量),layout(布局),draw(绘制)三个阶段。而ViewRootImpl作为连接view和android系统的重要组成部分(ViewRootImpl 类,是连接 WindowManager 和 DecorView 的纽带),在这里不得不提。我们可以把ViewRootImpl的根,View是在ViewRootImpl的基础上建立起来的。下原创 2016-03-15 23:30:16 · 883 阅读 · 0 评论 -
MVP模式探讨
先从字面意义上来了解MVP M——Model 模型 V——View 视图 P——Presenter 呈献者 *这里的View不是Android 组件,而是MVP模式的一部分从Android控件方面来说,View部分都是一些Fragment以及View,其中不包括数据、逻辑,只做单纯的显示,这样大大地简化了View的代码量,而且与Model完全解耦。**The原创 2016-06-14 19:24:23 · 302 阅读 · 0 评论 -
Android笔记二(MessageQueue && Message)
MessageQueue对于这个类,开始时,我们需要注意到google源码对其的注释说明: 消息是通过Handler以及Looper添加到Messagequeue消息队列中去的。我们可以通过new Looper()构造方法在当前线程中创建一个消息队列。也就是说创建Looper的时候就会创建相应的消息队列。既然消息队列最重要的作用就是对消息的处理,下面重点了解下两个方法enqueueMessa原创 2017-05-13 23:29:45 · 524 阅读 · 0 评论 -
Android笔记(100)通知流程
通知流程,从框架到应用我们都知道,Android应用想要发送通知,都需要先用Notification.Builder来构建一个通知,然后NotificationManager.notify()来将这个通知发送出来。发送出来的通知Notification将通过Binder通信,在框架中被处理后,封装成StatusBarNotification,传递到systemUI系统应用中,在通知栏中呈现出Expa原创 2017-05-25 21:53:09 · 1203 阅读 · 0 评论 -
handler message looper机制(二)
handler message looper机制(二)在handler message looper一文中,我们已经大概了解了这三者之间的关系。本篇文章在此基础上详细介绍Looper循环的流程以及post()和sendMessage()之间的区别。目录handler message looper机制二目录Looper循环之loop方法post以及sendMessage系列方法的区别Loope原创 2017-04-21 19:59:23 · 269 阅读 · 0 评论 -
Android笔记三(Handler)
关于Android消息机制中的另外一个类Handler,我在之前的两篇文章中有做讲解 handler message looper机制 handler message looper机制(二) 这里再做下总结: Handler处理消息的过程:首先,检查Message的callBack是否为空,不为空就让HanderCallback来处理消息,这个callback是一个Runnable对象,也原创 2017-05-18 21:02:56 · 217 阅读 · 0 评论 -
项目移植过程中,gen目录中R文件更新问题
项目移植过程中,如果遇到R文件出错情况,首先将java中的R文件删除。如果不行,还有下面几种方法:1)将工程clean.2)更改目标的版本号。例如将Android-14改成android-20,同时工程文件夹中的一个文件也将从Android4.0自动变成Android4.4w,同时工程文件夹中的project-properities中的VERSION也将自动变成android-20。此原创 2014-12-30 10:44:53 · 455 阅读 · 0 评论