没有合适的资源?快使用搜索试试~ 我知道了~
首页Android学习笔记:面向对象基础与三大特性详解
"Android宝典(学习笔记)" 是一份由传智播客学员黄玉昆整理的学习Android开发的详细笔记,它覆盖了从基础到高级的知识体系。这份笔记以文档结构图的形式呈现,使得知识点的组织清晰易懂,特别适合初学者和进阶者系统梳理Android技术。 笔记强调了学习者应该注重自我整理和消化,确保简历上的技能点能够真正掌握,避免技能堆砌。对于Java基础,笔记指出,具备良好的面向对象编程(OOP)理解至关重要。面向对象编程的核心在于将问题抽象成对象,通过封装(Encapsulation)隐藏对象的内部细节,只暴露必要的接口,这有助于提高代码的复用性、安全性和维护性。封装的原则是隐藏实现细节,仅提供公共方法来访问属性。 继承(Inheritance)是面向对象的另一个重要概念,它允许子类继承父类的属性和方法,增强了代码的重用性,同时也是多态(Polymorphism)的基础。多态使得父类引用可以指向子类对象,这意味着在运行时可以根据对象的实际类型调用适当的方法,增加了程序的灵活性。然而,多态可能导致父类无法访问子类的私有成员,这是一个潜在的限制。 学习者可以通过这个笔记学习到如何将复杂的编程逻辑简化,以及面向对象编程如何模拟现实生活中的交互模型,如在饭店就餐的例子。这些概念的掌握不仅有助于理解Android应用的开发,还能提升编程思维的深度。 "Android宝典(学习笔记)"是一份实用且系统的Android学习资料,适合那些希望通过深入理解和实践来提升Android技能的学习者。无论是初次接触Android的开发者,还是希望巩固已有知识的进阶者,都能从中获益良多。
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/9497529/bgb.jpg)
Cursor c = resolver.query(uri, new String[] { "name", "balance" }, "id=?", new String[] { 101 + "" }, null);
if (c.moveToNext()) {
System.out.print(c.getString(0));
System.out.println(" " + c.getInt(1));
}
c.close();
}
/**测试查询全部 */
public void testQueryAll() {
ContentResolver resolver = this.getContext().getContentResolver();
Uri uri = Uri.parse("content://com.itheima.sqlite.provider/person");
Cursor c = resolver.query(uri, new String[] { "id", "name", "balance" }, null, null, "name desc");
while (c.moveToNext()) {
System.out.println(c.getInt(0) + ", " + c.getString(1) + ", " + c.getInt(2));
}
c.close();
}
/** 测试查询一条 */
public void testQueryOneWithUriId() {
ContentResolver resolver = this.getContext().getContentResolver();
Uri uri = Uri.parse("content://com.itheima.sqlite.provider/3"); // 查询 ID 为 3 的记录
Cursor c = resolver.query(uri, new String[] { "id", "name", "balance" }, null, null, null);
if (c.moveToNext()) {
System.out.println(c.getInt(0) + ", " + c.getString(1) + ", " + c.getInt(2));
}
c.close();
}
/** 测试获取内容提供者的返回类型 */
public void testGetType() {
ContentResolver resolver = this.getContext().getContentResolver();
System.out.println(resolver.getType(Uri.parse("content://com.itheima.sqlite.provider/2")));
System.out.println(resolver.getType(Uri.parse("content://com.itheima.sqlite.provider/person")));
}
}
4、监听内容提供者的数据变化
在内容提供者中可以通知其他程序数据发生变化
通过 Context 的 getContentResolver()方法获取 ContentResolver
调用其 notifyChange()方法发送数据修改通知,发送到系统的公共内存(消息信箱中)
在其他程序中可以通过 ContentObserver 监听数据变化
通过 Context 的 getContentResolver()方法获取 ContentResolver
调用其 registerContentObserver()方法指定对某个 Uri 注册 ContentObserver
自定义 ContentObserver,重写 onChange()方法获取数据
示例代码(发通知部分):
public int delete(Uri uri, String selection, String[] selectionArgs) {
SQLiteDatabase db = helper.getWritableDatabase();
![](https://csdnimg.cn/release/download_crawler_static/9497529/bgc.jpg)
int delete = db.delete("person", selection, selectionArgs);
// == 通过内容访问者对象 ContentResolve 发通知给所有的 Observer ==
getContext().getContentResolver().notifyChange(uri, null);
db.close();
return delete;
}
}
监听部分:
// 注册内容观察者事件
private void initRegisterContentObserver() {
Uri uri = Uri.parse("content://com.itheima.sqlite.provider"); // 监听的 URI
// == 第 2 个参数:true 表示监听的 uri 的后代都可以监听到 ==
getContentResolver().registerContentObserver(uri, true, new ContentObserver(new Handler()) {
public void onChange(boolean selfChange) { // 接到通知就执行
personList = personDao.queryAll();
((BaseAdapter) personListView.getAdapter()).notifyDataSetChanged();
}
});
}
5、区别 Provider/Resolver/Observer
1)ContentProvider:内容提供者
把一个应用程序的私有数据(如数据库)信息暴露给别的应用程序,让别的应用程序可以访问;
在数据库中有对应的增删改查的方法,如果要让别的应用程序访问,需要有一个路径 uri:
通过 content:// 路径对外暴露,uri 写法:content://主机名/表名
2)ContentResolver:内容解析者
根据内容提供者的路径,对数据进行操作(crud);
3)ContentObserver:内容观察者
可以理解成 android 系统包装好的回调,数据发送变化时,会执行回调中的方法;
ContentResolver 发送通知,ContentObserver 监听通知;
当 A 的数据发生变化的时候,A 就会显示的通知一个内容观察者,不指定观察者,就会发消息给一个路径
二、Activity 活动
描述:
1)表示用户交互的一个界面(活动),每一个 activity 对应一个界面
2)是所有 View 的容器:button,textview,imageview;我们在界面上看到的都是一个个的 view
3)有个 ActivityManager 的管理服务类,用于维护与管理 Activity 的启动与销毁;
Activity 启动时,会把 Activity 的引用放入任务栈中
4)一个应用程序可以被别的应用程序的 activity 开启
此时,是将此应用程序的引用加入到了开启的那个 activity 的任务栈中了
5) activity 是运行在自己的程序进程里面的
在一个应用程序中,可以申请单独的进程,然此应用程序中的一个组件在新的进程中运行
6)可以在 activity 里面添加 permission 标签,调用者必须加入这个权限
与钱打交道的界面,都不允许被其他应用程序随意打开
如果觉得那个 activity 比较重要,可以在清单文件中配置,防止别人随意打开,需要配置一个权限
自定义权限:
在清单文件中配置 permission,创建一个新的权限
创建后,就会在清单文件中生成这个权限了
![](https://csdnimg.cn/release/download_crawler_static/9497529/bgd.jpg)
此时,需要开启这个界面,就需要使用这个权限
Tips:
*不可使用中文文本,需要使用字符串,抽取出来
*声明之后,会在 gen 的目录下,多出来一个文件:Manifest 的文件,系统也存在一个这样的文件
1、创建 Activity
+)定义类继承自 -% 类;
*)在清单文件中 -% 节点中声明'%(节点;
<activity
android:name="com.itheima.activity.MainActivity"
android:label="@string/app_name" >
<!-- 程序的入口,LAUNCHER 表示桌面快捷方式,进入的是此 Activity -->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> <!—启动时,默认匹配 --
</intent-filter>
</activity>
2、启动 Activity
通过意图(Intent)来启动一个 Activity;
+) 显示启动:
显示启动一般用于自己调用自己的情况(在当前应用找),这样的启动方式比较快速,创建 后指定包名和类名;
Intent intent = new Intent(this, OtherActivity.class);
startActivity(intent); // 启动新的 Activity
或者:
Intent intent = new Intent();
intent.setClassName("com.itheima.activity", "com.itheima.activity.OtherActivity"); // 包名、全类名
startActivity(intent); // 启动新的 Activity
*)隐式启动:
一般用于调用别人的 -%,创建 后指定动作和数据以及类型;
// 电话
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL); // 设置动作
intent.setData(Uri.parse("tel://123456")); // 设置数据
// 网页
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://192.168.1.45:8080/androidWeb"));
// 音频/视频,设置 type
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("file:///mnt/sdcard/daqin.mp3"), "audio/*"); // 设置数据和数据类型,将启动音频播放器(vedio)
.)为隐式启动配置意图过滤器:
显式意图是指在创建意图时指定了组件,而隐式意图则不指定组件,通过动作、类型、数据匹配对应的组件;
在清单文件中定义'%(时需要定义'/0(才能被隐式意图启动;
'/0(中至少配置一个'%(和一个'(,否则无法被启动;
对象中设置的 %、、 在'/0(必须全部包含 -% 才能启动;
'/0(中的'%(、'(、'(都可以配置多个, 对象中不用全部匹配,每样匹配一个即可启动;
如果一个意图可以匹配多个 -%,- 系统会提示选择;
剩余63页未读,继续阅读
![application/x-zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/8265a5b87f824c009956d91d10a31456_mawei7510.jpg!1)
mawei7510
- 粉丝: 213
- 资源: 16
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 多模态联合稀疏表示在视频目标跟踪中的应用
- Kubernetes资源管控与Gardener开源软件实践解析
- MPI集群监控与负载平衡策略
- 自动化PHP安全漏洞检测:静态代码分析与数据流方法
- 青苔数据CEO程永:技术生态与阿里云开放创新
- 制造业转型: HyperX引领企业上云策略
- 赵维五分享:航空工业电子采购上云实战与运维策略
- 单片机控制的LED点阵显示屏设计及其实现
- 驻云科技李俊涛:AI驱动的云上服务新趋势与挑战
- 6LoWPAN物联网边界路由器:设计与实现
- 猩便利工程师仲小玉:Terraform云资源管理最佳实践与团队协作
- 类差分度改进的互信息特征选择提升文本分类性能
- VERITAS与阿里云合作的混合云转型与数据保护方案
- 云制造中的生产线仿真模型设计与虚拟化研究
- 汪洋在PostgresChina2018分享:高可用 PostgreSQL 工具与架构设计
- 2018 PostgresChina大会:阿里云时空引擎Ganos在PostgreSQL中的创新应用与多模型存储
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)