4.1-android之基本知识
文章平均质量分 82
fei20121106
这个作者很懒,什么都没留下…
展开
-
(4.1.29.2)ViewModel替代VC沟通者
对于简单的数据,Activity 可以使用onSaveInstanceState() 方法从 onCreate() 中的捆绑包恢复其数据,但此方法仅适合可以序列化再反序列化的少量数据,而不适合数量可能较大的数据,如用户列表或位图,使用ViewModel可以解决这个问题。原创 2023-11-23 20:05:53 · 846 阅读 · 0 评论 -
(4.1.10.8)Android Handler之同步屏障机制(sync barrier)
一、概述简单理解为 异步消息插队并优先执行。场景:排队买票先来了一个普通用户来排队,买完票走了。后面又来了一个VIP用户A来买票 就一直站在卖窗口这里 也不走(ps:添加屏障 )紧接者又来了一个普通用户C,再后面又来了VIP用户BVIP A 对VIP B 说,哥们不要排队直接来窗口买票,VIP B买完票走了,VIP A 被 某个哥们叫走了(移除屏障)这个时候终于轮到普通用户C买票了。二、系统应用简单的来说就是优于事件回调执行,为了做一些优先级更高的操作 比如 视图刷新。当一个Ha原创 2021-05-13 11:46:37 · 491 阅读 · 0 评论 -
(4.1.29.2)Jetpack新成员,App Startup一篇就懂
Android 11系统已经来了,随之而来的是,Jetpack家族也引入了许多新的成员。其实以后Android的更新都会逐渐采用这种模式,即特定系统相关的API会越来越少,更多的编程API是以Jetpack Library的形式提供给我们的。这样我们就不需要专门针对不同的系统版本去写很多的适配逻辑,而是统一用Jetpack提供的接口即可。Android也是在用这种方式去解决长期以来的碎片化问题。而今年的Jetpack家族当中又加入了两名重磅的新成员,一个是Hilt,另一个是App Startup。转载 2020-08-25 10:29:23 · 216 阅读 · 0 评论 -
(4.1.29.1)LiveData数据驱动者
一、概述简单地说,LiveData是一个数据持有类。它具有以下特点:数据可以被观察者订阅;能够感知组件(Fragment、Activity、Service)的生命周期;当数据变化时,只有在组件出于激活状态(STARTED、RESUMED)才会通知观察者有数据更新;文中提到的“组件”皆指实现了LifecycleOwner接口Fragment、Activity。1.1 为什么需要LiveData从LiveData具有的特点,我们就能联想到它能够解决我们遇到的什么问题。LiveData具有以原创 2020-08-20 17:10:13 · 231 阅读 · 0 评论 -
(4.1.29)Android-Lifecycle详解
文章目录一、概念二、使用2.1 添加依赖:2.2 实现LifecycleObserver接口2.2.1 Java1.7使用LifecycleObserver2.2.2 Java1.8使用DefaultLifecycleObserver2.3 将LifecycleObserver添加到Lifecycle的观察者列表三、优势场景举例3.1 自定义生命周期函数+自己调用转发3.2 使用Lifecycle四、源码解析4.1 State状态 和 Event事件4.2 Activity/Fragment的生命周期触发s转载 2020-08-20 11:29:04 · 246 阅读 · 0 评论 -
(4.1.10.7)Android IdleHandler 原理浅析
问:什么是 IdleHandler?有什么用?怎么用?答:IdleHandler 可以用来提升性能,主要用在我们希望能够在当前线程消息队列空闲时做些事情(譬如 UI 线程在显示完成后,如果线程空闲我们就可以提前准备其他内容)的情况下,不过最好不要做耗时操作。具体用法如下。//getMainLooper().myQueue()或者Looper.myQueue()Looper.myQueue().addIdleHandler(new IdleHandler() { @Overrid.原创 2020-08-16 11:57:32 · 175 阅读 · 0 评论 -
(4.1.10.6)Handler是怎么做到消息延时发送的
1、postDelay()一个10秒钟的Runnable A-----消息进队----Loop消费---发现没有即时信息了----MessageQueue调用nativePollOnce()阻塞,Looper阻塞;2、紧接着post()一个Runnable B---消息进队----Loop消费---判断现在A时间还没到、正在阻塞,Handler把B插入消息队列的头部(A的前面),然后调用nativeWake()方法唤醒线程;3、MessageQueue.next()方法被唤醒后,重新开始读取消息链表,第原创 2020-08-16 11:26:32 · 169 阅读 · 0 评论 -
(4.1.21.9)HTTPS 加密过程演变分析
1、前言 可能有初学者会问,即时通讯应用的通信安全,不就是对Socket长连接进行SSL/TLS加密这些知识吗,干吗要理解HTTPS协议呢。这其实是个误解:当今主流的移动端IM数据通信,总结下来无外乎就是长连接+短连接的方式,长连接就是众所周之的TCP、UDP、WebSocket(WebSocket的本质还是TCP),而短连接就是HTTP/HTTPS了。即时通讯IM应用中,短连接的安全跟长连接相比,同样很重要。市面上的主流短连接通信方式,都已逐步从HTTP过渡到HTTPS了(iOS上的应用就更...转载 2020-07-27 10:44:12 · 285 阅读 · 0 评论 -
(4.1.21.8)HTTPS 加密算法 和 中间人攻击
1、引言随着互联网安全意识的普遍提高,对安全要求稍高的应用中,HTTPS的使用是很常见的,甚至在1年前,苹果公司就将使用HTTPS作为APP上架苹果应用市场的先决条件之一(详见:《苹果即将强制实施 ATS,你的APP准备好切换到HTTPS了吗?》)。所以,无论是即时通讯IM还是其它应用,在网络安全意识增强的今天,很多场景下使用HTTPS是肯定没错的。对于即时通讯IM的开发人员来说,长连接用TLS这没疑问,短连接用HTTPS也没问题,但我想问你一个最基础的面视问题:HTTPS到底用的是对称加密还是非对转载 2020-07-27 10:41:13 · 183 阅读 · 0 评论 -
(4.1.15.3)子线程更新UI校验 viewRootImpl的checkThread
一概念1 Kotlin语言介绍11 Kotlin的优势12 Kotlin的不足2 开发工具支持21 Android Studio支持211 Android Studio 30以下版本配置212 Hello Kotlin213 转换Java to Kotlin22 云端IDE二准备开始1 基本语法11 定义包名12 定义函数13 定义变量和常量14 注释2习惯用语21原创 2020-06-05 15:56:46 · 1471 阅读 · 0 评论 -
(4.1.10.5)ThreadLocal原理
什么是ThreadLocal?如果你从字面上来理解,很容易将ThreadLocal理解为『本地线程』,那么你就大错特错了。首先,ThreadLocal不是线程,更不是本地线程,而是Thread的局部变量,也许把它命名为ThreadLocalVariable更容易让人理解一些。它是每个线程独享的本地变量,每个线程都有自己的ThreadLocal,它们是线程隔离的。接下来,我们通过一个生活案例来开始理解ThreadLocal。一、使用场景 场景1:每个线程需要一个独享的对象,通常是工.转载 2020-05-27 11:15:54 · 176 阅读 · 0 评论 -
(4.1.19)【Android UI设计与开发】第06期:底部菜单栏(一)使用TabActivity实现底部菜单栏
转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/8989063 从这一篇文章开始,我们将进入到一个应用程序主界面UI的开发和设计中了,底部菜单栏在Android的应用开发当中占有非常重要的地位。几乎所有的手机应用程序都有底部菜单栏这样的控件,主要是因为手机的屏幕大小有限,这样一种底转载 2015-03-09 14:07:54 · 972 阅读 · 0 评论 -
(4.1.21)Android 主线程和线程之间相互发送消息
通过分析Activity源码,我们知道每个Activity都有一个Looper,所以主线程在接收Message是不需要调用Looper.prepare()和Looper.loop(),但是线程是不带Looper的,当线程要接收来自主线程的消息是就需要调用Looper.prepare()和Looper.loop()。以下我们将通过一个示例,讲述主线程和线程之间如何发送Message。转载 2015-03-09 14:11:18 · 865 阅读 · 0 评论 -
(4.1.21.1)android 主线程和子线程之间的消息传递
(1)主线程发信息,子线程内定义手柄,并looper;(2)子线程发信息,主线程定义手柄。从主线程发送消息到子线程(准确地说应该是非UI线程) package com.zhuozhuo;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import转载 2015-03-09 14:12:37 · 816 阅读 · 0 评论 -
(4.1.18.2)Android Service 服务(一)—— Service
一、 Service简介Service是android 系统中的四大组件之一(Activity、Service、BroadcastReceiver、ContentProvider),它跟Activity的级别差不多,但不能自己运行只能后台运行,并且可以和其他组件进行交互。service可以在很多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放转载 2015-03-09 14:03:29 · 625 阅读 · 0 评论 -
(4.1.21.4)Android Handler 异步消息处理机制的妙用 创建强大的图片加载类
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38476887 ,本文出自【张鸿洋的博客】最近创建了一个群,方便大家交流,群号:55032675上一篇博客介绍了Android异步消息处理机制,如果你还不了解,可以看:Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三转载 2015-03-09 14:19:28 · 728 阅读 · 0 评论 -
(4.1.2.2)基础总结篇之三:Activity的task相关
http://blog.csdn.net/liuhe688/article/details/6761337古人學問無遺力,少壯工夫老始成。紙上得來終覺淺,絕知此事要躬行。南宋.陸遊《冬夜讀書示子聿(yù)》软件行业也是一样,多少前辈不遗余力的奋斗才出现了软件行业的繁荣的景象,其中已有不少成为大师级人物。今天我们站在伟人的肩膀上,自然会有不少的优势,但不要忘了,要在对技术原创 2015-03-09 11:32:31 · 780 阅读 · 0 评论 -
(4.1.2.1)基础总结篇之二:Activity的四种launchMode
合抱之木,生於毫末;九層之台,起於累土;千里之行,始於足下。《老子》今天在社区看到有朋友问“如何在半年内成为顶级架构师”,有网友道“关灯睡觉,不用半年的...”,的确,做梦还来的快一些。作为一个程序员,树立远大的目标是值得欣赏的,但不能只去空想,要一步一步地实践才行。成大事者,须从小事做起;万事起于忽微,量变引起质变。我们今天要讲的是Activity的四种launchMode。原创 2015-03-09 11:32:10 · 780 阅读 · 0 评论 -
(4.1.13)Android之Notification的多种用法
我们在用手机的时候,如果来了短信,而我们没有点击查看的话,是不是在手机的最上边的状态栏里有一个短信的小图标提示啊?你是不是也想实现这种功能呢?今天的Notification就是解决这个问题的。 我们也知道Android系统也是在不断升级的,有关Notification的用法也就有很多种,有的方法已经被android抛弃了,现在我实现了三种不同的方法,并适应不同的android版转载 2015-03-09 13:51:51 · 765 阅读 · 0 评论 -
(4.1.18)Android Service完全解析,关于服务你所需知道的一切(上)
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11952435相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的Android程序员如果连Service都没听说过的话,那确实也太逊了。Service作为Android四大组件之一,在每一个应用程序中都扮演着非常重要的角色。它主要用于在后台处理一些耗时的逻辑,转载 2015-03-09 14:02:20 · 824 阅读 · 0 评论 -
(4.1.18.1)Android Service完全解析,关于服务你所需知道的一切(下)
转载请注册出处:http://blog.csdn.net/guolin_blog/article/details/9797169在上一篇文章中,我们学习了Android Service相关的许多重要内容,包括Service的基本用法、Service和Activity进行通信、Service的销毁方式、Service与Thread的关系、以及如何创建前台Service。以上所提到的这些知识点转载 2015-03-09 14:02:16 · 726 阅读 · 0 评论 -
(4.1.21.2)Android Thread
创建新线程的常用方式: 1. 直接使用Thread创建 Thread thread = new Thread(); thread.start(); 2. 扩展java.lang.Thread类 Thread类的定义public class Threadextends Object implements Runnable(){…}转载 2015-03-09 14:15:41 · 694 阅读 · 0 评论 -
(4.1.26)ContentProvider和Uri详解
一、使用ContentProvider(内容提供者)共享数据ContentProvider在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对你应用中的数据进行添删改查。关于数据共享,以前我们学习过文件操作模式,知道通过指定文件的操作模式为Context.MODE_WORL转载 2015-03-21 13:45:11 · 692 阅读 · 0 评论 -
(4.1.26.2)ContentProvider往通讯录添加联系人和获取联系人
在Android中,可以使用ContentResolver对通信录中的数据进行添加、删除、修改和查询操作。在对联系人进行操作时需加入以下两个权限 content://com.android.contacts/contacts 操作的数据是联系人信息Uricontent://com.android.contacts/data/phones 联系人电话Uric转载 2015-03-21 13:51:06 · 701 阅读 · 0 评论 -
(4.1.18.5)Android Service学习之AIDL, Parcelable和远程服务
AIDL的作用 由于每个应用程序都运行在自己的进程空间,并且可以从应用程序UI运行另一个服务进程,而且经常会在不同的进程间传递对象。在Android平台,一个进程通常不能访问另一个进程的内存空间,所以要想对话,需要将对象分解成操作系统可以理解的基本单元,并且有序的通过进程边界。 通过代码来实现这个数据传输过程是冗长乏味的,Android提供了AIDL工具来处理这项工作。原创 2015-03-21 17:22:29 · 568 阅读 · 0 评论 -
(4.1.26.1)ContentProvider案例
PersonContentProvider内容提供者类package com.ljq.db;import android.content.ContentProvider;import android.content.ContentUris;import android.content.ContentValues;import android.content.UriMatche转载 2015-03-21 13:46:15 · 512 阅读 · 0 评论 -
(4.1.18.6)Android IPC进程通信之Messager方式
在Android中,每个应用程序都有自己的进程,当需要在不同的进程之间传递对象时,该如何实现呢?显然,Java中是不支持跨进程内存共享的,因此要传递对象,需要把对象解析成操作系统能够理解的数据格式,以达到跨界对象访问的目的。在Android中,则采用AIDL(Android Interface Definition Language :接口定义语言)方式实现。AIDL (Andro原创 2015-03-21 17:27:52 · 575 阅读 · 0 评论 -
(4.1.28.3)第二种方法HttpClient.setCookieStore(mCookieStore)实现的HTTP工具类
项目中客户端与服务器端采用http请求进行交互,在这里我把http请求的工具类贴出来。该工具类采用的是HttpClients框架,HTTP保存方式有两种选择 :一种:整个应用 只创建 一个HttpClient对象,然后保存在整个程序中去。此情况无法创建多线程中应用。二种:随时创建HttpClient对象。系统自动保存Session就行。此情况可能对系统资源消耗利害,用完之后请随时销转载 2015-08-09 22:51:37 · 6225 阅读 · 0 评论 -
(4.1.28.2)HttpPost.setHeader("Cookie", "PHPSESSID=" + PHPSESSID)方式的HttpClient工具类
[java] view plaincopypackage com.rainet.tiis.network; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.http.HttpResponse;转载 2015-08-09 22:54:48 · 4618 阅读 · 0 评论 -
(4.1.28.1)HTTP通信之HttpClinet保持登录状态问题
三种方式三种方式 /* 获取cookieStore */ CookieStore cookieStore = httpClient.getCookieStore(); List<Cookie> cookies = cookieStore.getCookies(); HttpPost post = new HttpPost(url);原创 2015-08-09 22:45:37 · 820 阅读 · 0 评论 -
(4.1.29) Android 操作SQLite基本用法
一.SQLiteDatabase的介绍Android提供了创建和是用SQLite数据库的API。SQLiteDatabase代表一个数据库对象,提供了操作数据库的一些方法。在Android的SDK目录下有sqlite3工具,我们可以利用它创建数据库、创建表和执行一些SQL语句。下面是SQLiteDatabase的常用方法。 SQLiteDatabase的常用方法原创 2015-08-10 13:26:32 · 646 阅读 · 0 评论 -
(4.1.29.1)Android 操作SQLite基本用法之SQLiteOpenHelper
该类是SQLiteDatabase一个辅助类。这个类主要生成一 个数据库,并对数据库的版本进行管理。当在程序当中调用这个类的方法getWritableDatabase()或者 getReadableDatabase()方法的时候,如果当时没有数据,那么Android系统就会自动生成一个数据库。 SQLiteOpenHelper 是一个抽象类,我们通常需要继承它,并且实现里面的3个函数:1转载 2015-08-10 13:36:32 · 669 阅读 · 0 评论 -
(4.1.2.5)Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案
转载请表明出处:http://blog.csdn.net/lmj623565791/article/details/379362751、概述众所周知,Activity在不明确指定屏幕方向和configChanges时,当用户旋转屏幕会重新启动。当然了,应对这种情况,Android给出了几种方案:a、如果是少量数据,可以通过onSaveInstanceState()和onRest转载 2015-07-17 18:44:41 · 686 阅读 · 0 评论 -
(4.1.8.7)Android Fragment 你应该知道的一切
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/42628537,本文出自:【张鸿洋的博客】很久以前写过两篇Fragment的介绍,主要就是介绍其功能:Android Fragment 真正的完全解析(上)和Android Fragment 真正的完全解析(下) 有兴趣的可以凑合看下。之前的博客属于怎么使用Frag转载 2015-07-17 18:42:39 · 630 阅读 · 0 评论 -
(4.1.30)android 数据传递详解(Serialization、Parcelable、Parcel、Intent、Bundle)
第一、四大组件间数据传递方式:启动四大组件通过Intent对象来实现,Intent的功能包括启动四大组件以及相关信息+传递数据。其中传递数据Intent提供了putExtra和对应的getExtra方法来实现:putExtra和getExtra 其实是和Bundle put和get方法一一对应的,在Intent类中有一个Bundle的mExtras成员变量所有的pu转载 2015-08-26 13:29:34 · 625 阅读 · 0 评论 -
(4.1.30.1)Android中Intent传递对象的两种方法(Bundle.putParcelable/putSerializable)!
Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口,为了让大家更容易理解我还是照常写了一个简单的Demo,大转载 2015-08-26 13:31:40 · 596 阅读 · 0 评论 -
(4.1.30)XML解析之DOM、SAX
dom/* * Copyright (C) 2009 Teleca Poland Sp. z o.o. <android@teleca.com> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with th原创 2015-08-14 12:10:54 · 552 阅读 · 0 评论 -
(4.1.32)AlarmManager的使用
// push Intent intent = new Intent(MainActivity.this, AlermReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast( MainActivity.this, 0, intent, 0); Calendar calendar = C转载 2015-08-14 17:33:14 · 527 阅读 · 0 评论 -
(4.1.33)PendingIntent和Intent
intent英文意思是意图,pending表示即将发生或来临的事情。 PendingIntent这个类用于处理即将发生的事情。比如在通知Notification中用于跳转页面,但不是马上跳转。 Intent 是及时启动,intent 随所在的activity 消失而消失。 PendingIntent 可以看作是对intent的包装,通常通过getActivity,getBroadc转载 2015-08-14 17:43:53 · 592 阅读 · 0 评论 -
(4.1.31)JSON解析之自解析、Gson、fastjson
Json的全称:JavaScript Object Notation“名称/值”对的集合(A collection of name/value pairs)。值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)自己写.JSONObject.getString(“参数名”) 返回:String.JSONObject.getJSO原创 2015-08-14 14:49:36 · 567 阅读 · 0 评论