以相声之名说android四大对象
当里个当,当里个当,Android此系统,易用有好用。谁为其奉献,只靠四巨头。
当里个当,当里个当,老大唤activity,界面缔造者。清水出芙蓉,天然来雕饰。
当里个当,当里个当,你若明白他,周期咋整呀。这个看代码,重点看方法。
当里个当,当里个当,这里的方法,名字怪怪的。都叫on方法,唤作将一把。
当里个当,当里个当,首先是oncreate,数据初始化。控件实例化,还是要靠他。
当里个当,当里个当,其后在onstar,开启新intent。随后来onresume,停止由唤起。
当里个当,当里个当,以上的代码,程序顶呱呱。其他的方法,究竟是个啥。
当里个当,当里个当,竟跟者onpause,activity退出了。线程不见了,pause作祟了。
当里个当,当里个当,ac不见了,只因这onstop。从此此进程,再也不见了。
当里个当,当里个当,程序全退掉,destory不可少。步骤要铭记,程序就无比。
当里个当,当里个当,老二service,名叫“王进喜”(劳模)。出师未捷身先死,长使英雄泪满襟。
当里个当,当里个当,要问其原理,继续来研究。怎么来开启,我们查书籍。
当里个当,当里个当,资料查到了,两种的方法。一种startservice,自身就开启。
当里个当,当里个当,另种bind了,需要绑定者。service优先级,本身大问题。
当里个当,当里个当,service优先第,系统要搞死。要问其周期,activity一模子。
当里个当,当里个当,其他都说过,onbind需说明。“此人”一骑兵,绑定一对象,返回一接口,进程间通讯,此子不可少。
当里个当,当里个当,一二说完了,接下是老三。老三叫cp(Content Provider).内容提供者。好比图书馆,资料存于此。
当里个当,当里个当,万卷书存此,任由你翻起。对于此类型,(会用)你看行不行。URI方法,android好参数。
当里个当,当里个当,熟能能生巧,请看此例子。对于源代码,如下便所示:
public class DBlite extends SQLiteOpenHelper {
public DBlite(Context context) {
super(context, RuiXin.DBNAME, null, RuiXin.VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("create table "+RuiXin.TNAME+"(" +
RuiXin.TID+" integer primary key autoincrement not null,"+
RuiXin.EMAIL+" text not null," +
RuiXin.USERNAME+" text not null," +
RuiXin.DATE+" interger not null,"+
RuiXin.SEX+" text not null);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
public void add(String email,String username,String date,String sex){
SQLiteDatabase db = getWritableDatabase();
ContentValues values = new ContentValues();
values.put(RuiXin.EMAIL, email);
values.put(RuiXin.USERNAME, username);
values.put(RuiXin.DATE, date);
values.put(RuiXin.SEX, sex);
db.insert(RuiXin.TNAME,"",values);
}
}
首先提供元数据,
public class MyProvider extends ContentProvider{
DBlite dBlite;
SQLiteDatabase db;
private static final UriMatcher sMatcher;
static{
sMatcher = new UriMatcher(UriMatcher.NO_MATCH);
sMatcher.addURI(RuiXin.AUTOHORITY,RuiXin.TNAME, RuiXin.ITEM);
sMatcher.addURI(RuiXin.AUTOHORITY, RuiXin.TNAME+"/#", RuiXin.ITEM_ID);
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
// TODO Auto-generated method stub
db = dBlite.getWritableDatabase();
int count = 0;
switch (sMatcher.match(uri)) {
case RuiXin.ITEM:
count = db.delete(RuiXin.TNAME,selection, selectionArgs);
break;
case RuiXin.ITEM_ID:
String id = uri.getPathSegments().get(1);
count = db.delete(RuiXin.TID, RuiXin.TID+"="+id+(!TextUtils.isEmpty(RuiXin.TID="?")?"AND("+selection+')':""), selectionArgs);
break;
default:
throw new IllegalArgumentException("Unknown URI"+uri);
}
getContext().getContentResolver().notifyChange(uri, null);
return count;
}
@Override
public String getType(Uri uri) {
// TODO Auto-generated method stub
switch (sMatcher.match(uri)) {
case RuiXin.ITEM:
return RuiXin.CONTENT_TYPE;
case RuiXin.ITEM_ID:
return RuiXin.CONTENT_ITEM_TYPE;
default:
throw new IllegalArgumentException("Unknown URI"+uri);
}
}
@Override
public Uri insert(Uri uri, ContentValues values) {
// TODO Auto-generated method stub
db = dBlite.getWritableDatabase();
long rowId;
if(sMatcher.match(uri)!=RuiXin.ITEM){
throw new IllegalArgumentException("Unknown URI"+uri);
}
rowId = db.insert(RuiXin.TNAME,RuiXin.TID,values);
if(rowId>0){
Uri noteUri=ContentUris.withAppendedId(RuiXin.CONTENT_URI, rowId);
getContext().getContentResolver().notifyChange(noteUri, null);
return noteUri;
}
throw new IllegalArgumentException("Unknown URI"+uri);
}
@Override
public boolean onCreate() {
// TODO Auto-generated method stub
this.dBlite = new DBlite(this.getContext());
// db = dBlite.getWritableDatabase();
// return (db == null)?false:true;
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// TODO Auto-generated method stub
db = dBlite.getWritableDatabase();
Cursor c;
Log.d("-------", String.valueOf(sMatcher.match(uri)));
switch (sMatcher.match(uri)) {
case RuiXin.ITEM:
c = db.query(RuiXin.TNAME, projection, selection, selectionArgs, null, null, null);
break;
case RuiXin.ITEM_ID:
String id = uri.getPathSegments().get(1);
c = db.query(RuiXin.TNAME, projection, RuiXin.TID+"="+id+(!TextUtils.isEmpty(selection)?"AND("+selection+')':""),selectionArgs, null, null, sortOrder);
break;
default:
Log.d("!!!!!!", "Unknown URI"+uri);
throw new IllegalArgumentException("Unknown URI"+uri);
}
c.setNotificationUri(getContext().getContentResolver(), uri);
return c;
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
// TODO Auto-generated method stub
return 0;
}
}
接下来封装。
当里个当,当里个当,由此便看见,cp能封装,程序安全性,大大没问题。
当里个当,当里个当,一三说完了,接下四老弟。BR(BroadcastReciver)登场了,名唤接收者。
当里个当,当里个当。好比一灯塔,照亮能前行。程序多广播,此者全都接着。见图如下示:

看他的原理,运行很简单,看图见下方:

次子有脾气,十秒不见息(消息),便会耍脾气(报错)。
对于四对象,鄙人仅知此。你若要深入,恳请来探究。
以相声之名说android四大对象的更多相关文章
- android四大组件之Broadcast
广播的概念 现实中:我们常常使用电台通过发送广播发布消息,买个收音机,就能收听 Android:系统在产生某个事件时发送广播,应用程序使用广播接收者接收这个广播,就知道系统产生了什么事件.Androi ...
- Android 四大组件之再论service
service常见的有2种方式,本地service以及remote service. 这2种的生命周期,同activity的通信方式等,都不相同. 关于这2种service如何使用,这里不做介绍,只是 ...
- Android四大基本组件介绍与生命周期
Android四大基本组件介绍与生命周期 Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器 ...
- Android 四大组件之三(广播)
1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为Android组件间的通 ...
- Android四大组件之Service
Android四大组件之Service Android支持服务的概念,服务是在后台运行的组件,没有用户界面,Android服务可用有与活动独立的生命周期.Android支持两种类型的服务: 本地服务: ...
- android四大组件详解--摘
Android四大基本组件介绍与生命周期 Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器 ...
- Android四大组件详解
注:本文主要来自网易的一个博主的文章,经过阅读,总结,故留下文章在此 Android四大基本组件介绍与生命周期 Android四大基本组件分别是Activity,Service服务,Content P ...
- Android 四大组件之" ContentProvider "
前言 ContentProvider作为Android的四大组件之一,是属于需要掌握的基础知识,可能在我们的应用中,对于Activity和Service这两个组件用的很常见,了解的也很多,但是对Con ...
- Android四大组件之一 -- Service详解
相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的Android程序员如果连Service都没听说过的话,那确实也太逊了.Service作为Android四大组件之一,在每一个应用程序 ...
随机推荐
- B+/-Tree原理
B-Tree介绍 B-Tree是一种多路搜索树(并不是二叉的): 1.定义任意非叶子结点最多只有M个儿子:且M>2: 2.根结点的儿子数为[2, M]: 3. ...
- AIM Tech Round 3 (Div. 1) A. Letters Cyclic Shift 贪心
A. Letters Cyclic Shift 题目连接: http://www.codeforces.com/contest/708/problem/A Description You are gi ...
- HTML5定稿了,终于有一种编程语言开发的程序可以在Android和IOS两种设备上运行了
2007 年 W3C (万维网联盟)立项 HTML5,直至 2014 年 10 月底,这个长达八年的规范终于正式封稿. 过去这些年,HTML5 颠覆了 PC 互联网的格局,优化了移动互联网的体验,接下 ...
- 在 C# 中,如何发现死锁并防止死锁
在解释死锁如何发生以及如何阻止死锁的过程中,你似乎遇到了问题. 当两个( 最小二) 线程试图获取已经被另一个锁锁定的资源的锁时,就会发生死锁. 线程 1锁定资源 1尝试获取对资源 2的锁定. 同时,线 ...
- Groovy中Closure的this到底指向谁?
Groovy in Action(中文版)第136页明确说Closure的this指向Closure自己.并且从代码注释处作者也是这样理解的: class Mother{ int field = ...
- linux搭建C开发环境
目前决大多 数的Linux用户对Linux的了解还处于比较低级的层次,他们可能会几条命令.会配几种服务.会用rpm来安装软件.会操作KDE/Gnome界机等等,但是当他们遇到一些需要编译安装的软件时, ...
- linux 除了某个文件或某个文件夹以外全部删除
比如一个目录下有1,2,3,4,5这五个文件,现在我需要删除除了2以外的所有文件,那么我可以使用 find . ! -name 2 -exec rm -f {} \; 当然你还可以配合着 -maxde ...
- 行尸走肉第八季/全集The Walking Dead迅雷下载
<行尸走肉第八季>将在10月22号回归播出, 将于5月1日起正式开始拍摄!目前剧组已开始招募客串演员和丧尸群演,第八季拍摄时长初步预计会持续到11月16日.而这三位已确认为<行尸走肉 ...
- 都市侠盗第五季/全集Leverage迅雷下载
第五季 Leverage Season 5 (2012)看点:TNT电视网砍掉了<都市侠盗>(Leverage),这部已经播出至第5季的团队盗窃现代罗宾汉剧集将在今年完结,这样的决定对&l ...
- 多个Jar的合并操作
同事要写Android平台下的打包工具,遇到需要将多个jar合并成一个jar的问题.这里列一下操作步骤: 1.将所有jar文件复制至某临时目录中,通过jar命令解压得到所有的.class文件 > ...