![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
文章平均质量分 73
callmexiaolu
这个作者很懒,什么都没留下…
展开
-
android 子线程更新UI问题
消息机制,对于Android开发者来说,应该是非常熟悉。对于处理有着大量交互的场景,采用消息机制,是再好不过了。有些特殊的场景,比如我们都知道,在Android开发中,子线程不能更新UI,而主线程又不能进行耗时操作,一种常用的处理方法就是,在子线程中进行耗时操作,完成之后发送消息,通知主线程更新UI。或者使用异步任务,异步任务的实质也是对消息机制的封装。 关于子线程到底能不能更新UI这个问题...转载 2018-05-21 20:32:26 · 384 阅读 · 0 评论 -
GreenDao
可以先上官网看下对于GreenDao的介绍,以及为什么使用greendao。IntroductiongreenDAO is an object/relational mapping (ORM) tool for Android. It offers an object oriented interface to the relational database SQLite. ORM to...原创 2018-07-22 14:27:00 · 2183 阅读 · 0 评论 -
greendao是如何实现查询操作的,多线程是否安全?
想要了解GreenDao如何进行数据库CRUD操作,那么可以看源码。查询:先看最简单最容记得查询方法queryBuilder().list()。/** Executes the query and returns the result as a list containing all entities loaded into memory. */ public List...原创 2018-07-22 15:42:41 · 5202 阅读 · 0 评论 -
GreenDao多线程查询
GreenDao号称最快的ORM数据操作。特别是多线程中,因为他在多线程查询中,在每个线程中定义一个属于当前线程的查询对象,这样子每个线程之间都互相不干扰,比对对象加锁进行同步操作的性能提高了很多,节省了加锁的开销。 先用最普通的方法在线程中访问对象读取数据。private void queryThread() { final Query query = sonDao...原创 2018-07-22 20:45:07 · 4705 阅读 · 2 评论 -
GreenDao一对一,一对多查询
实体类中如何进行数据库表中的关联。GreenDao实现的很简单。一对一,使用注解@ToOne(),括号中参数为对应表对应的外键public class Son { @Id(autoincrement = true) private Long id; private String name; private int age; pr...原创 2018-07-22 22:44:55 · 3018 阅读 · 0 评论 -
Android之IPC机制(二)
Android之IPC机制IPC全称是Intent Process Communication即进程通信。为什么需要进程通信呢? android是基于linux内核的,linux中两个进程锁分配的虚拟机的地址是不一致的,是两个完全不同 的虚拟机,所以也就意味着两个进程运行不相互影响(进程隔离)。linux中对于进程之间的交流有着 限制,那么在Android中也一样。linux...原创 2018-08-09 19:23:31 · 1159 阅读 · 0 评论 -
viewPager下的fragment生命周期变化
微信的四个页面使用viewPager + Fragment实现。那么我们滑动的时候fragment的生命周期是如何变化的呢?创建四个fragment。activity布局中使用viewPager,然后在activity代码中添加fragment。布局和微信一样: 我们启动应用的时候,生命周期辩护如下:activity: onCreate activity: onStart a...原创 2018-08-06 16:44:00 · 565 阅读 · 0 评论 -
gravity中的start和end
在AndroidStudio中,在布局中写下gravity=“left|bottom”时,会提示将left替换为start。why?它们的不同点是啥?文档上是这么说的:left 0x03 Push object to the left of its container, not changing its size. start 0x00800003 Push objec...转载 2018-08-24 21:53:33 · 1119 阅读 · 0 评论 -
ImageView的scaleType属性
我们知道,ImageView有一个属性叫做scaleType,它的取值一共有八种,分别是:matrix,fitXY,fitStart,fitCenter,fitEnd,center,centerCrop,centerInside。那我们下面一起来看看这八种取值分别代表什么意思。我用两张图片来做demo,这两张图片的分辨率一大一小,图片分别叫做big和small。原图如下:big:s...转载 2018-08-24 22:14:06 · 219 阅读 · 0 评论 -
深入探索Activity生命周期以及启动过程
1.各个生命周期的作用1.onCreate()可以进行初始化操作,初始化组件以及布局资源。此时Activity处于不可见状态。2.onStart()表示Activity在启动,前台还没有显示。3.onResume()表示Activity已经在屏幕上显示UI。4.onPause()此方法回调时,Activity正在停止(Paused形态),通常接下来 onStop() 会被回调 ...原创 2018-10-13 21:15:32 · 557 阅读 · 0 评论 -
Android设计模式
MVC设计模式1.定义M(Model):业务逻辑处理。暴露方法接口供C层调用。数据库操作,网络操作等耗时操作V(View):处理数据处理。处理数据显示,XML布局可以视为View层C(Controller):Activity处理用户交互。读取数据给View层显示2.特点:耦合性低便于UI界面显示和业务逻辑分离。使项目有很好的扩展性(只需要在M层中添加对应的接口和方法)和维护性。那...原创 2018-10-14 19:26:03 · 252 阅读 · 0 评论 -
Android布局优化
Android布局优化为什么优化?移动设备的内存和cpu的性能都收到了一定的限制,程序不可能无限地使用内存和cpu资源,过多使用内存会导致程序内存溢出,即OOM。这是因为Android分配给每个应用程序的内存空间大小是有限的。布局优化的思路?其实布局优化就是__减少布局文件的层级。__因为布局中的层级少了,那么Android绘制时的工作量就少了,程序的性能就提高了。如何优化?1....原创 2018-09-30 09:56:48 · 195 阅读 · 0 评论 -
Android进程保活
1.进程的优先级1. 前台进程2. 可见进程3. 服务进程4. 后台进程5. 空进程前台进程的重要性最高,依次递减,空进程的重要性最低1.1 前台进程 —— Foreground process用户当前操作所必需的进程。通常在任意给定时间前台进程都为数不多。只有在内存不足以支持它们同时继续运行这一万不得已的情况下,系统才会终止它们。拥有用户正在交互的 Activity(已调用 ...转载 2018-10-19 21:38:08 · 294 阅读 · 0 评论 -
Android的冷启动与热启动以及优化方案
热启动定义:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热启动。特点:热启动因为会从已有的进程中来启动,所以热启动就不会走Application这步了,而是直接走MainActivity(包括一系列的测量、布局、绘制),所以...转载 2018-10-19 23:55:36 · 2027 阅读 · 0 评论 -
Android vector 标签 pathData
原文链接:https://www.jianshu.com/p/a3cb1e23c2c4 Android Support Library 23.2 出来以后,在Android 5.0(API级别21)以前的系统中,也可以定义矢量drawables,即VectorDrawable。它可以在不失清晰度的情况下进行缩放。你仅仅需要需要一个矢量图片的资源文件,而不再需要为每个屏幕密度设置一个资源文件...转载 2018-10-22 21:16:24 · 343 阅读 · 0 评论 -
Android studio 抽取方法来封装公共代码
原创 2018-05-14 21:01:29 · 2843 阅读 · 0 评论 -
Android UI之DatePicker、TimePicker(日期和时间显示)
DatePicker效果TimePicker效果这一篇博客分别讲解Android平台下,关于日期和时间的几个相关控件。包括DatePicker(日期选择控件)、TimePicker(时间选择控件)、DatePickerDialog(日期选择对话框)、TimePickerDialog(时间选择对话框)、AnalogClock(模拟时钟控件)、DigitalClock(数字时钟控件)。对于时间控件,无...转载 2018-05-14 16:15:15 · 1199 阅读 · 0 评论 -
Android 多进程IPC(进程间通信)问题(一)
什么是IPC?在Android中如何进行多进程?简单,在需要开启进程的Activity中声明一下即可,使用android:process声明,引号中的内容是进程的名字,这个可以自己定义。 <activity android:name=".SecondActivity" android:process=":remote"...原创 2018-04-29 15:40:40 · 807 阅读 · 0 评论 -
Android中突发情况Activity数据的保存和恢复
Android中突发情况Activity数据的保存和恢复写在前面:在我们的APP使用的过程中,总有可能出现各种手滑、被压在后台、甚至突然被杀死的情况。所以对APP中一些临时数据或关键持久型数据,就需要我们使用正确的方式进行保存或恢复。突发情况都有哪些?因为本文讨论的是当一些突发情况的出现时,对数据的保存和恢复。所以现在总结一下突发情况应该都有哪些?点击back键点击锁屏键点击home键其他APP进...转载 2018-03-15 23:55:49 · 398 阅读 · 0 评论 -
Call requires API level 23 (current min is 15): android.app.Fragment#getContext,方法报错
文章转载自:http://blog.csdn.net/yangtong19880810/article/details/43084205Android Studio中调用getContext()方法报错,信息如下:Call requires API level 23 (current min is 15): android.app.Fragment#getContext大致意思是:就是说调用这个方...转载 2018-03-12 23:16:13 · 5995 阅读 · 0 评论 -
安卓开发过程中setSupportActionBar()方法报错
在码过程中,android studio会自动导入头文件,于是当你码出下面的代码时候就会报错setSupportActionBar()方法报错,报错信息是大致意思是这个方法在android.support.v7.widget.Toolbar这个头文件中。所以只需要把android.widget.Toolbar 替换成 android.support.v7.widget.Toolbar就OK了。...原创 2018-03-06 14:16:49 · 2851 阅读 · 1 评论 -
Android Studio中src/main/res/values中strings.xml文件中字符串使用
strings.xml文件中的内容在活动中获得字符串的方式:str = getResources().getString(R.string.app_name);在xml布局文件中引用该字符串:android:text="@string/app_name"在Activity获取字符串资源: 正确做法: getResources().getString(R.string.app_name)...原创 2018-03-13 15:56:44 · 8783 阅读 · 0 评论 -
Android的Activity生命周期详细
官方的Activity生命周期图:各个生命周期函数:(1) onCreateActivity生命周期的第一个方法,表示Activity正在被创建,在该方法中通过setContentView 方法加载xml编写的布局文件,然后通过findByViewId方法获取控件;onCreate()方法在Activity整个生命周期中只会调用一次,所以该方法中就可以做一些大致只需要做一次的工作,如:一些变量的初...转载 2018-04-04 13:04:48 · 377 阅读 · 0 评论 -
Android 隐式启动Activity方式之IntentFilter匹配规则
显示调用Intent intent1 = new Intent(MainActivity.this, MainActivity.class);startActivity(intent1);需要明确指定被调用对象的组件信息,包括包名和类名。隐式调用需要Intent能够匹配目标组件的IntentFilter中设置的过滤信息,如果不匹配则无法启动目标Activity1. IntentFliter...原创 2018-04-16 11:43:48 · 1576 阅读 · 0 评论 -
Android之Service探索(一)
Service即服务,Android的四大组件之一,又有两种,service和IntentService应用:service可以在后台执行长时间的操作,service因为在后台运行,因此不能与用户进行界面交互。我们在生活中最常见的service应该是后台播放音乐和后台下载了。Service和IntentService的注册以及创建和启动和停止: 注册: 在AndroidManifest.xm...原创 2018-04-17 21:11:32 · 284 阅读 · 0 评论 -
Android的四种启动模式
Android系统采用栈的方式来存储创建的Activity示例,后进先出。若我们多次启动同一个Activity。系统会创建多个实例依次放入任务栈中。当按back键返回时,每按一次,一个Activity出栈,直到栈空为止。当栈中无不论什么Activity。系统就会回收此任务栈。(其实这就是默认的启动方式)Standard模式——标准模式(Activity默认启动方式)说明:每次启动一个Activit...转载 2018-04-13 22:00:53 · 238 阅读 · 0 评论 -
Android ListView和Adapter介绍
ListView是安卓布局中常用的一个控件,用来展示列表的效果,使用ListView并更新其中的item内容需要使用相关的Adapter来实现,在这其中Adapter充当了一个转换功能的类,其实现了绑定数据到UI界面,负责创建每个项目的子View和提供对下层数据的访问。ListView 显示大量相同格式数据 常用属性: listSelector listView每项...转载 2018-04-25 16:25:04 · 3210 阅读 · 0 评论 -
Android MVC框架理解
MVC优点: 耦合性低视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。模型是自包含的,并且与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。如果把数据库从MySQL移植到Oracle,或者改变基于RDBMS数...原创 2018-04-25 17:19:23 · 927 阅读 · 0 评论 -
Android LayoutInflater的inflater方法详解
关于inflate参数问题,我想很多人多多少少都了解一点,网上也有很多关于这方面介绍的文章,但是枯燥的理论或者翻译让很多小伙伴看完之后还是一脸懵逼,so,我今天想通过三个案例来让小伙伴彻底的搞清楚这个东东。本篇博客我们不讲源码,只看使用。源码的解读会在下一篇博文中带来。inflate方法从大范围来看,分两种,三个参数的构造方法和两个参数的构造方法。在这两类中又有细分,OK,那我们就把各种情况都来演...转载 2018-04-26 11:51:57 · 350 阅读 · 0 评论 -
Android之RecyclerView
RecyclerView是ViewGroup的子类,每一个列表项都是作为一个View子对象展示的,而View子对象是可以自定义的。先来个简易版的列表项显示,每个列表项只显示一个标题,并且View对象是一个简单的TextView,我们通过一个例子来理解和知道如何使用RecyclerView类。RecyclerView意思为可回收视图,所做的就是回收再利用,反复循环。贴图参考自:《Android编程权...原创 2018-05-04 10:54:22 · 264 阅读 · 0 评论 -
Android Fragment.java中的getActivity()方法解析
废话不多说,看源码:/** * Return the {@link FragmentActivity} this fragment is currently associated with. * May return {@code null} if the fragment is associated with a {@link Context} * instead....原创 2018-05-04 11:13:38 · 1934 阅读 · 0 评论 -
Android FragmentManager之beginTransaction()
使用: private Fragment fragment; private FragmentManager fm; fm = getSupportFragmentManager(); fragment = fm.findFragmentById(R.id.fragment_container); fm.beginTransaction() ...原创 2018-05-04 11:28:31 · 7538 阅读 · 1 评论 -
Android 深入理解BaseAdapter和实现ListView并处理点击事件
这里主要讲解使用BaseAdapter来实现对ListView的Item内容自定义填充,重写后各个方法的作用,以及Item点击事件。查看源码可以看到BaseAdapter实现了ListAdapter,SpinnerAdapter这两个接口,继续查看,发现这两个接口继承于接口Adapter。废话不多说,上源码。方法int getcount()的源码: /** * How many item...原创 2018-04-27 09:23:49 · 3793 阅读 · 2 评论 -
Android设计模式之Builder模式
Builder设计模式定义:将一个复杂对象与它的表示分离,使得同样的构建过程可以创建不同的表示。参与者:Product:被构建的复杂对象,ConcreteBuilder用来创建该对象的内部表示,并定义它的装配过程。Builder:抽象接口,用来定义创建Product对象的各个组成部件操作ConcreteBuilder:Builder接口的具体实现。可以定义多个,是实际构建Produ...原创 2018-10-20 14:56:03 · 350 阅读 · 0 评论