Android四大组件-ContentProvider
一. 前言1. 什么是ContentProvider?
内容提供者,是 Android 的四大组件之一
应用程序(进程)间共享数据的一种方式
为存储和获取数据提供了统一的接口
2. Google是怎样定义ContentProvider的?
内容提供者将一些特定的应用程序数据供给其他应用程序使用。
数据可以存储于文件系统,SQLite数据库或者其他方式。
内容提供者继承于ContentProvider基类,为其它应用程序取用和存储它管理的数据实现了一套标准的方法。
应用程序并不直接调用这些方法,而是使用ConteResolver对象,调用它的方法作为替代。
ContentResolver可以与任意内容提供者进行会话,与其合作来对所有相关交互通讯进行管理。
3. 作用示意图
二. 原理参考:图文详解 Android Binder跨进程通信的原理
三. ContentProvider的使用1. 统一资源标识符 URI① 定义:Uniform Resource Identifier,即统一资源标识符。
② 作用:唯一标识 ContentProvider 和 其中的数据。(外界通过 URI ...
Android存储-数据库:SQLite
一. 前言1. 什么是SQlite? SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎,它是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且由于其占用资源低(占用内存只需几百K)、处理速度快等特点,非常受欢迎。
2. SQlite的优点
轻量级
独立
隔离
跨平台
多语言接口
安全性
3. 注意IO操作,建议放在线程操作,因为可能卡死。
4. 创建数据库123456789101112131415161718192021222324252627282930313233343536373839public class DatabaseHelper extends SQLiteOpenHelper { //数据库名称 public static final String DATABASE_NAME = "user.db"; //数据库版本 public static final int DATABASE_VERSION = 1; public static final ...
Android存储-文件操作:其他位置
一. 前言读取工程目录下的文件,包括 assets目录下的文件、res目录下的文件。
二. 操作assets目录下的文件123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960/** * 操作asset目录文件 */public void assetTest(){ //1.直接加载 WebView webView = findViewById(R.id.web_view); webView.loadUrl("file:///android_asset/html/test.html"); //2.open的方式 try { InputStream is = getResources().getAssets().open("html/test.html"); Toast.makeText(this, " ...
文件操作:外部存储
一. 前言1. 关于什么是外部存储
我一直以为Android设备的外部存储就是前几年可以插入,可以拔出的内存卡。但这是错误的。
过去早期的Android设备中,内部存储的确是固定的,而外部存储可以像U盘一样移动。
现在的Android设备中,很多安卓设备都将自身的存储扩充到8GB以上,比如我用的小米8扩充到了64GB。所以,它们将存储在概念上分为 内部internal 和 外部external 两部分,但其实都是在手机内部,也就是说那些8GB,16GB,32GB,64GB都是外部存储。
因此,不管Android手机有没有可移动的SDCard,它们总是有外部存储和内部存储,最关键的是,我们可以通过相同的api来访问手机自带的存储和可移动的SDCard。
2. 外部存储迷惑人的位置
一般情况下/storeage/emulated/0是我们见过最多的外部存储位置。但是/mnt/sdcard和/sdcard是什么情况?答案是它们也是外部存储位置。
要理解这三个路径的关系,我们需要先要了解一下linux文件挂载的概念,有兴趣的可以自己了解。具体可以参考这一篇文章:彻底搞懂Android文件存储 ...
文件操作
一. 前言1. 分类
内部存储:Internal storage
外部存储:External storage
2. 区别
内部存储不需要用在manifest文件中声明权限,也不需要考虑android6.0的运行时权限。
内部存储的空间很小,Sqlite3和SharedPreferences产生的文件都存放在内部存储里面。
真正的内部存储在位置是data/data/包名处,其他位置都是外部存储。
外部存储需要在manifest文件中声明权限,有时候需要考虑android6.0的运行时权限。
123//在AndroidManifest.xml中申明权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
12345678910111213141516//如果需要动态申请权限 参 ...
Android四大组件-BroadcastRecevier
一. 前言BroadcastReceiver是 Android 四大组件之一,是一种广泛运用在应用程序之间异步传输信息的机制。Broadcast 本质上是一个Intent 对象,差别在于Broadcast可以被多个 BroadcastReceiver处理。BroadcastReceiver 是一个全局监听器,通过它的 onReceive() 可以过滤用户想要的广播收音机,进而进行其它操作。
BroadcastReceiver 默认是在主线程中执行,如果onReceiver()方法处理事件超过10s,则应用将会发生ANR(Application Not Responding),此时,如果建立工作线程并不能解决此问题,因此建议:如处理耗时操作,请用 Service代替。
BroadcastReceiver的主要声明周期方法onReceiver(),此方法执行完之后,BroadcastReceiver实例将被销毁。
二. BroadcastReceiver的生命周期1. Register2. SendBroadcast3. onReceive4. unRegister三. Broadcast ...
Android多线程-IntentService
一. 前言1.多线程常用的主要方法
继承Thread类
实现Runable接口
AsyncTask
Handler
HnadlerThread
IntentService
2. IntentService的作用处理异步请求 和 实现多线程
3. 使用场景线程任务需要按顺序,在后台执行。
最常见的场景:离线下载。
4. 工作原理
若启动IntentService 多次,那么 每个耗时操作 则 以队列的方式 在 IntentService的 onHandleIntent回调方法中依次执行,执行完自动结束。
二. 源码分析1. IntentService 如何单独开启一个新的工作线程主要分析内容 = IntentService源码中的 onCreate()方法
12345678910111213141516171819202122232425262728293031323334353637383940414243@Overridepublic void onCreate() { super.onCreate(); // 1. 通过实例化andler ...
Android四大组件-Service:具体使用
一. 本地Service1. 简介这是最普通、最常用的后台服务Service。
2. 使用步骤步骤1:新建子类继承Service类,在AndroidManifest.xml里注册Service。(需重写父类的onCreate()、onStartCommand()、onDestroy()和onBind()方法)
步骤2:构建用于启动Service的Intent对象。
步骤3:调用startService()启动Service、调用stopService()停止服务。
3. 实例① 新建子类继承Service类,在AndroidManifest.xml里注册Service
123456789101112131415161718192021222324252627282930313233343536373839404142public class MyService extends Service { //日志 private static final String TAG = MyService.class.getSimpleName(); //音乐播放器 ...