
android
文章平均质量分 62
lyl0530
快马加鞭,嘚嘚嘚...
展开
-
Android CPU架构学习笔记
Intel使用CISC(复杂指令集计算机)ARM使用RISC(精简指令集计算机)1. Android目前有以下七种cpu架构,其区别是指令集不同ARMv5 第5/6代的ARM处理器,缺少对浮点数计算的硬件支持,使用软件浮点运算,在需要大量计算时有性能瓶颈。只支持armeabi。虽然速度慢,但通用性强,仍需要兼容。ARMv7 第7代及以上的ARM处理器,目前主流版本。使用硬件浮点运算,具有高级扩展功能。支持 armeabi-v7a 和 armeabi。ARMv8 第8代、...原创 2020-11-17 14:56:03 · 2531 阅读 · 0 评论 -
学习笔记:view的绘制流程
绘制View的背景,内容,绘制子View,还有前景跟滚动条。1:drawBackground(canvas): 作用就是绘制 View 的背景。2:onDraw(canvas) :绘制 View 的内容。View 的内容是根据自己需求自己绘制的,该方法是一个空方法,View的继承类自己复写实现绘制内容。(每个View都需要重载该方法,ViewGroup不需要实现该方法)3:dispatchDraw(canvas):遍历子View进行绘制内容。dispatchDraw()方法内部会遍历每个子视图.原创 2020-10-06 18:19:19 · 270 阅读 · 0 评论 -
ScrollView+RecyclerView实现悬停导航栏
一. 导航栏可以正常的滑动到顶部 ScrollView LinearLayout LinearLayout - banner : h1 LinearLayout - 导航栏 : h2 RecyclerView - content : h3 = 屏幕高度-(h1+h2) 1. RecyclerView的layout_height设置为match_parent或wrap_content,加载的ite...原创 2020-10-06 18:15:42 · 1036 阅读 · 0 评论 -
getLayoutParams().width/getMeasuredWidth()/getWidth()
1.getLayoutParams().widthgetLayoutParams().width可以在onMesure()方法中获取 。若在xml文件中定义了该view的具体宽度,如android:layout_width="500dp",view.getLayoutParams().width就为500;若定义为android:layout_width="match_parent",则v...原创 2020-01-02 21:42:39 · 1463 阅读 · 1 评论 -
EventBus学习笔记
Android开发时,常用的通信方式有以下几种:Handler、Broadcast、Intent1. 广播作为Android的四大组件之一,广播是重量级的,比较消耗资源,单纯的用于消息传递,大材小用。若和Android交互,用到Context或Intent的时候,广播的便捷性就凸显出来了。另外,许多系统级的事件都是通过广播来通知的,比如说网络、电量的变化,短信发送和接收的状态等。所以,如果与...原创 2020-01-01 22:02:28 · 226 阅读 · 0 评论 -
Android获取WiFi的ssid
1.在Androidmanifast.xml文件中添加权限 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <...原创 2019-12-31 15:23:15 · 4403 阅读 · 0 评论 -
inflate方法
LayoutInflater的inflate方法重载了四种调用方式,分别为:public View inflate(int resource, ViewGroup root)public View inflate(int resource, ViewGroup root, boolean attachToRoot)public View inflate(XmlPullParser par...原创 2019-10-16 09:32:53 · 717 阅读 · 0 评论 -
UI访问在主线程、耗时操作在子线程的原因
Android规定,访问UI只能在主线程中进行,若在子线程中进行UI访问,就会抛出异常。Q:系统为何要求不能在子线程中访问UI?A:Android的UI控件不是线程安全的,多线程并发的访问,可能造成UI控件不可预期的状态。Q:为何系统不对UI控件的访问加上锁机制呢?这样就可以多线程并发访问了。A:1.加上锁机制后,会使UI控件的访问逻辑变复杂;2.加锁之后,UI访问效率变低,因为锁...原创 2018-07-19 20:52:17 · 1430 阅读 · 0 评论 -
获取桌面应用列表
通过Intent.CATEGORY_LAUNCHER筛选出包含launcher的桌面应用列表,在所有的应用列表applicationInfos中匹配,成功,则放入appInfos中。public List<AppInfo> queryFilterAppInfo() { pm = context.getPackageManager(); // 创建一个类别为CA...原创 2018-07-30 19:32:48 · 1311 阅读 · 0 评论 -
获取apn列表时遇到的一个多进程通信问题
手机的设置中可以获取apn列表,通过代码分析,会调用ApnSetting的静态方法mvnoMatches过滤部分虚拟运营商,最终得到apn列表。if (r != null && !TextUtils.isEmpty(mvnoType) && !TextUtils.isEmpty(mvnoMatchData)) { if (ApnSetting.mvno...原创 2018-08-03 13:05:37 · 748 阅读 · 0 评论 -
进程间通信之aidl流程浅析
1. 铺垫正常情况下,一个apk启动后只会运行在一个进程中,其进程名为apk的包名,所有的组件都会在这个进程中运行。若要将某些组件(如Service,Activity等)运行在单独的进程中,就要在清单文件中对该组件设置android:process属性。2. 代码1) 清单文件:Service 和 Activity在同一个apk,但所处不同进程中<service andro...原创 2018-08-18 17:06:13 · 362 阅读 · 0 评论 -
一个Service管理多个AIDL接口
通常情况下,每个AIDL接口对应一个Service进行进程间通信,若有多个ADIL接口,也要创建多个Service,但Service是系统资源,无限制增加的话,会占用过多内存。下面就介绍下Binder连接池,以及怎样实现一个Service管理多个ADIL接口。Binder连接池,是将各个业务模块的Binder请求统一转发到远程Service中去执行,可避免重复创建Sevice。1 首先提供...原创 2018-08-19 17:52:27 · 3383 阅读 · 0 评论 -
ArrayAdatper构造传值和getView()方法
利用ListView和Arrayader实现一个带有图片和介绍的列表:protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //u...原创 2018-07-07 16:06:29 · 1489 阅读 · 0 评论 -
service强制运行在phone进程
<service android:name=".atservice.ATService" android:process="com.android.phone"> <intent-filter> <action android:name="com.sagereal.atcmd.service.ACTION"/> <原创 2018-07-23 20:49:34 · 641 阅读 · 0 评论 -
android双卡时对apn的操作
apn(access point names),每个卡都会对应一系列的apn,如主卡为联通卡,对应的apn有3gwap/3gnet/uninet/nuiwap/3gwap等。每个卡默认选择一个apn,用户可更改。1. 获取主卡或副卡当前使用的apn,对应的uri地址:"content://telephony/carriers/preferapn"。 APN getAPN(int su...原创 2018-07-11 20:03:59 · 3710 阅读 · 3 评论 -
SubscriptionInfo和SubscriptionManager相关知识梳理
1. subid和slotidslotid或者phoneid是指卡槽,双卡机器的卡槽1值为0,卡槽2值为1,依次类推。subid:SubscriptionId(Subscription Identifier)。subid是数据库telephony.db的表siminfo的主键递增项,其中telephony.db在"/data/user_de/0/com.android.providers.t...原创 2018-07-17 19:26:17 · 10939 阅读 · 0 评论 -
内置apk
本文目的是实现内置apk和第三方apk通过aidl通信,着重说下,如何内置apk及内置时有关aidl的一些注意事项。一、内置带源码的apk1. 准备工作:1.1 Android源码1.2 先在Android Studio中,通过AIDL实现Service[服务端]、Client[客户端]的通信2. 内置:有以下两种内置方式2.1 把Service整体作为一个独立的apk进行内置1) 在p...原创 2018-07-04 15:38:37 · 1172 阅读 · 0 评论 -
TitleBar的复用
TitleBar在很多界面中都会用到,每个界面都编写一遍,效率太低,故学习了一下TitleBar的复用。1. 在layout文件夹中定义一个title.xml文件:一个Button,表示back按键;一个TextView,表示该活动的标题<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:androi...原创 2018-07-02 21:25:48 · 199 阅读 · 0 评论 -
android网络编程中使用java的回调机制
1) 先定义一个接口public interface HttpCallbackListener { void onFinish(String response); void onError(Exception e);}2) 在工具类HttpUtil中定义一个静态方法sendHttpReq()static void sendHttpReq(final String ...原创 2018-04-04 11:15:42 · 256 阅读 · 0 评论 -
Android之多进程
1. android:process属性正常情况下,一个apk启动后只会运行在一个进程中,其进程名为apk的包名(可用adb shell ps查看),所有的组件都会在这个进程中运行。若要将某个组件(如Service,Activity等)运行在单独的进程中,或一些组件运行在某个进程中,就要在清单文件中对该组件设置android:process属性。还可以设置该属性,使不同应用的组件,运行在相...原创 2018-08-20 20:56:03 · 861 阅读 · 0 评论 -
进程、线程和运行在主线程的Service
1. 进程进程一般指一个执行单元。每个进程都有自己独立的资源和内存空间,其它进程不能任意访问当。同时系统给每个进程分配的内存也会有限制。2. 线程线程是CPU调度的基本单位,一个进程可以包含多个线程,也可以只有一个线程,这个线程就是主线程,即UI线程。当系统中线程过多时,系统会通过时间片轮转的方式调度每个线程。只有线程数小于CPU的核心数时,线程才可以并行执行。同时线程也是一种受限...原创 2018-08-20 21:07:18 · 2401 阅读 · 0 评论 -
android常用知识点汇总
1. 清空EditText内容: mEtSearch.setText("");//置空 2. 设置EditText设置光标位置:Selection.setSelection(et_name.getText(),et_name.getText().toString().length());3. 修改ListView的item选中之后的颜色 :android:listSelector="...原创 2019-11-20 17:12:40 · 299 阅读 · 0 评论 -
getActionBar()返回空指针异常
1. 检查minSdkVersion,必须大于等于11,11之前的版本是不支持ActionBar的。2. 检查主题是否引入的是带有noActionBar字样的主题3. 检查Activity是否继承自AppCompatActivity,若是,获取ActionBar的方法需要用getSupportActionBar();若Activity继承自Activity,activity.getActio...原创 2019-11-03 17:14:50 · 221 阅读 · 0 评论 -
ListView中出现多种布局时的处理
ListView中出现每行布局都不同的情形时,要在Adapter中分别处理。如奇数行展示的是图在左字在右,偶数行展示的是字在左图在右,则处理如下:public class MyAdapter extends BaseAdapter { private static final String TAG = "MyAdapter"; private Context mContex...原创 2019-09-01 22:23:37 · 144 阅读 · 0 评论 -
报错:was originally bound here
2019-09-18 10:22:47.562 10511-10511/com.abc.www.xxx E/ActivityThread: Activity com.abc.www.xxx.activity.login.LoginActivity has leaked ServiceConnection com.abc.www.xxx.activity.login.LoginActivity$1...原创 2019-09-18 22:38:11 · 1896 阅读 · 0 评论 -
Android中音频文件的使用
try { String fileName = "media/close.mp3"; AssetManager assetManager = context.getAssets();//获取当前工程下assert文件夹的路径 AssetFileDescriptor fd = assetManager....原创 2019-07-08 19:04:10 · 1553 阅读 · 0 评论 -
混淆后 json解析异常
在混淆的时候,如果没有在混淆文件中keep掉我们的JavaBean类,那么这个类中的变量可能会被混淆成其他内容,导致在json解析的时候难以准确解析。{"a":true,"b":"-1","c":"操作成功","f":{}}解决的办法是:在工程目录下的 proguard-project.txt 混淆配置文件中,添加不需要混淆的类或者包名。取消混淆的命令如下:-keep cl原创 2019-02-28 18:43:57 · 1494 阅读 · 0 评论 -
HTTP 500
981 lyl = --> POST https://xxx1 http/1.1 981 lyl = Content-Type: application/json; charset=UTF-8 981 lyl = Content-Length: 94 982 lyl = --> END POST (encoded body omitted) 407 lyl = <--...原创 2019-02-27 17:52:02 · 2899 阅读 · 0 评论 -
MVP模式 学习笔记
MVP(Model-View-Presenter)模式:Model: 数据层,提供数据,负责与网络层和数据库层的逻辑交互.View: UI层,负责显示数据, 并向Presenter报告用户行为.Presenter: 逻辑处理层,从Model拿数据, 应用到UI层, 管理UI的状态, 决定要显示什么, 响应用户的行为.1. 主要优势耦合降低, Presenter变为纯Java的代码逻辑...原创 2019-02-17 21:26:15 · 247 阅读 · 0 评论 -
Android视图的标签属性
1. 针对任何View的属性 • 常用的最基本属性 • 内边距属性 padding • 外边距属性 margin 2. 只针对RelativeLayout的属性 • 反方向对齐属性 to/above/below • 同方向对齐属性 align • 相对父视图的属性 alignparent/center 1). 反方向对齐属性 lay...原创 2019-01-15 09:13:09 · 408 阅读 · 0 评论 -
关于optionmeun
一 . activity可以设置两种主题: android:theme="@android:style/Theme.NoTitleBar.Fullscreen" //不要TitleBar和StatusBarandroid:theme="@android:style/Theme.NoTitleBar" //不要TitleBaroptionmeun和app_name都在TitleBar内...原创 2019-01-14 22:23:19 · 128 阅读 · 0 评论 -
Handler机制
1 Handler机制--线程间通信的方式子线程调用Handler对象的sendMessge方法发送消息给MessageQueue,而和Handler对象绑定的Looper对象,会通过loop方法从MessageQueue中获取消息,交由Handler对象的handleMessge方法处理,进行更新UI等操作。Looper对象运行在主线程,和Looper对象绑定的Handler的handleM...原创 2018-09-28 21:09:22 · 251 阅读 · 0 评论 -
序列化Parcelable 和Serializable
Serializable、Parcelable 都可实现序列化,并用于Intent传递数据。Serializable是java的序列化接口,使用简单但开销大,序列化和反序列化过程需大量I/O操作。Parcelable是Android的序列化方式,因此更适用于Android平台。使用相对前者麻烦,但效率高。在Android平台上,首选这种序列化方式。Parcelable主要用于内存序列化上,...原创 2018-09-06 21:43:35 · 152 阅读 · 0 评论 -
Messenger和AIDL
Messenger和AIDL都是IPC通信方案,且Messenger的底层实现是AIDL,故messenger和aidl都是基于Binder的。Messenger在不同进程中传递Message对象,服务端一次只能处理一个请求,此时不存在并发执行的情况,不用考虑线程同步问题。所以,Messenger支持低并发的一对多串行的通信,支持实时通信。但Messenger不支持远程过程调用(RPC),...原创 2018-08-21 20:37:08 · 530 阅读 · 0 评论