Android攻城狮入门第二门课,Android攻城狮的第二门课(第3季)

广播broadcast

查看全部

0

采集

收起

2019-02-09

点击事件

case R.id.bind://绑定服务

intent2=new Intent(MainActivity.this,MyBindService.class);

startService(intent2);//StartService 和 BindService相结合实现服务(要在onDestroy销毁),去掉就是单独的BinderService。

bindService(intent2, connection, BIND_AUTO_CREATE);//第二个参数是连接对象,第三个参数是必须要填的一个常量,没写的话将无法自动创建Service。

break;

case R.id.Unbind:// 解绑服务

unbindService(connection);

break;

单纯使用 BindService还是有很多隐患的。实际上可以结合 StartService 和 BindService。如图,使用同一个通信 intent2 ,就可以实现。

但比较麻烦的是,你打开了服务,就要相应地去关闭服务,所以要在 MainActivity 中重写 onDestroy()方法:

@Override

protected void onDestroy() {

// TODO Auto-generated method stub

stopService(intent2);

unbindService(connection);//解绑

super.onDestroy();

}

这样在 Activity 被销毁的时候,就会停止服务,并解除了绑定。这样一来,即使程序被强制退出,也不会报错(之前会报一些和Service相关的错)。

注意:解绑只能使用一次,多次使用会报错,另外当启动源在没有解绑的情况下退出程序也会报错。

摘自评论区:

bindService();方法中的第二个参数必须实现,ServiceConnection conn = new ServiceConnection(){};里边有两个方法可以暂时不管。如果写成null是会报错的。

查看全部

1

采集

收起

2019-01-25

SQLite是用C语言编写的开源嵌入式数据库引擎。它支持大多数的SQL92标准,并且可以在所有主要的操作系统上运行。

SQLite:轻量级、性能不错,管理成本小。在管理、维护方面都非常出色,功能强大。

——支持高达2TB大小的数据库

——以单个文件的形式存在

——以B-Tree的数据结构形式存储在磁盘

特点主要包括:

1.轻量级:一个动态库、单文件

2.独立性:没有依赖,无需安装

3.隔离性:全部在一个文件夹中

4.跨平台:支持众多操作系统

5.多语言接口:支持众多编程语言

6.安全性:事务(在下面细说)

关于事务处理的安全性问题:

---通过数据库的排它锁和共享锁来实现独立的事务处理

---多个进程可以在同一时间内从同一个数据库读取数据,但只有一个可以写入数据(保证数据的一致性,但也牺牲了效率)

基本满足移动的、嵌入设备的开发。

--------------------

SQLite支持的数据类型:

NULL、INTEGER、REAL、TEXT、BLOB。分别表示 空值、整型、浮点型、字符串型、二进制对象。

有意思的是,它既然支持多种编程语言,但有的语言是没有像REAl或者BLOB这样的数据类型,要怎么解决呢?那就是采用“弱引用”,也叫动态数据类型。

动态数据类型(弱引用):

---当某个值插入到数据库时,SQLite将会检查它的类型,如果该类型与关联的列不匹配,SQLite则会尝试将该值转换成该列的类型,如果不能转换,则该值将作为本身的类型存储。

但最好不要使用不支持的类型。

-----------------------

使用须知:

---由于资源占有少、性能良好和零管理成本,嵌入式数据库有了它的用武之地。例如Android、IOS。

---没有可用于 SQLite 的网络服务器、只能通过网络共享,可能存在文件锁定(Windows)或者性能问题。

---只提供数据库级的锁定。

---没有用户账户的概念,而是根据文件系统确定所有数据库的权限。

查看全部

//创建一个类继承SQLiteOpenHelper,并重写onCreate,onUpgrade方法

查看全部

//SharedPerferences存取数据

//mysps:存储的xml文件名,MODE_PRIVATE:当前程序可读

SharedPerferences sps = getSharedPerferences("mysps","MODE_PRIVATE");

//通过edit()方法获得一个编辑器对象

Editor editor = sps.edit();

//用编辑器对象调用putxxx方法存入简单数据key-valus

editor.putInt("age",20);

//最后都需要写个提交才能存储完成

editor.commit();

查看全部

SystemService

1. 使用LayoutInflater把一个layout转换成view

LayoutInflater inflater = (LayoutInflater) MainActivity.this.getSystemService(LAYOUT_INFLATER_SERVICE);

View view = inflater.inflate(R.layout.activity_main, null);

setContentView(view);

查看全部

给gestureOverlayView设置监听器:

gestureOverlayView.addOnGesturePerformedListener(new OnGesturePerformedListener(){})

重写方法onGesturePerformed()。

如图,onGesturePerformed()的示例代码,也就是关于手势识别的代码实现。

ArrayList:预测集

查看全部

当应用程序在安装时,系统就会分配给他一个userid,当该应用要去访问其他资源比如文件的时候,就需要userid匹配。默认情况下,任何应用创建的文件,sharedpreferences,数据库应该都是私有的(位于/data/data//files),其他程序无法访问。除非在创建时指定了MODE_WORLD_READABLE 或者 MODE_WORLD_WRITEABLE。

创建的文件保存在/data/data//files目录

openFileOutput(fileName,MODE):第一个参数是文件的名字,第二个参数是权限,权限可

查看全部

0

采集

收起

2018-11-16

代码实现

1. 首先是创建数据库,和上一节课一样:

SQLiteDatabase db = openOrCreateDatabase("stu.db",MODE_PRIVATE,null);

2. 然后是创建表格,和上一节一样:

db.execSQL("create table if not exists stutb (_id integer primary key autoincrement, name text not null, sex text not null, age integer not null )");

查看全部

button中设置android:onClick="doClick"

String name=pref.getString("username","" );

if (name==null) {

checkBox1.setChecked(false);

}else {

checkBox1.setChecked(true);

查看全部

0

采集

收起

2018-11-16

广播优先级别

android:priority="1000">//值为-1000~1000

abortBroadcast();//截断广播的方法

/**

* 动态注册广播接收器*/

查看全部

0

采集

收起

2018-11-16

通过execSQL进行数据操作(比较复杂,不建议使用)

// 打开或创建(如果有就打开,没有就创建,没有“覆盖”的问题)一个数据库

SQLiteDatabase db = openOrCreateDatabase("user.db",MODE_PRIVATE,null);// 数据库名,权限,游标(不需要)

//创建表(usertb),创建主键(_id),创建列(name,age,sex

db.execSQL("create table if not exists usertb (_id integer primary key autoincrement, name text not null, age integer not null, sex text not null)";);

db.execSQL("insert into usertb (name,age,sex) values('张三','男',20)";);//查询语句

Cursor cursor = db.rawQuery("select * from usertb",null); // 查询数据,以游标形式,第二个参数代表条件

if (cursor!=null){

//表示查询成功

while(cursor.moveToNext()){

Log.i("info","_id"+cursor.getInt(cursor.getColumnIndex("_id")));// 先获得列的编号,再通过编号获得对应的值。

Log.i("info","name="+cursor.getString(cursor.getColumnIndex("name")));

Log.i("info","sex="+cursor.getString(cursor.getColumnIndex("sex")));

Log.i("info","age="+cursor.getInt(cursor.getColumnIndex("age")));

}

cursor.close(); // 释放资源

}

db.close(); // 关闭数据,释放内存

查看全部

SQLite中的Cursor的作用和使用

查看全部

“SQLite”数据库的使用 一

/*

* @param myDB.db 数据库的名字,最好以".db"结尾,这样导出到外部的时候不需要再转格式

* @param MODE_PREIVATE 设置模式,有私有(只能改应用程序访问),只读,读写等。

* @param CursorFactory 游标工厂。 暂时不知道干什么的,给空即可。

* */

SQLiteDatabase sqLiteDatabase= openOrCreateDatabase("myDB.db", MODE_PRIVATE, null);//打开或者创建数据库

/*

* 执行sql语句

* 创建数据库表,使用 create table if not exists tablename 的形式,判断表是否存在,如果存在,则不创建

* 注意:主键建议使用"_"开头,如"_id",因为在以后的ListView开发中,貌似只能识别"_"开头的主键

* */

sqLiteDatabase.execSQL("create table if not exists User(_id integer primary key autoincrement, name text)");//执行sql语句

/*

* 插入数据,必须加into,否则报错

* */

sqLiteDatabase.execSQL("insert into User (name) values('张三')");

查看全部

SQLite特点主要包括:

1、轻量级 一个动态库、单文件

2、独立性 没有依赖、无须安装

3、隔离性 全部在一个文件夹中

4、跨平台 支持众多操作系统

5、多语言接口 支持众多编程语言

6、安全性 事务

--关于事务处理的安全性:

-通过数据库上的独占性和共享锁来实现独立事务处理

-多个进程可以同一时间从同一个数据库读取数据,但只有一个可以写入数据。

SQLite的数据类型:

-SQLite支持NULL、INTEGER、REAL、TEXT、BLOB数据类型

-依次代表:空值、整型值,浮点值,字符串值,二进制对象

动态数据类型(弱引用)

-当某个值插入到数据库时,SQLite会检查他的数据类型,如果该类型与关联的列类型不匹配,SQLite就会尝试将该值转换成该列的类型,如果不能转换,该值将作为本身的类型存储。

使用须知:

-由于资源占用少、性能良好和零管理成本,嵌入式数据库有了他的用武之地。例如Android、IOS

-没有可用于SQLite的网络服务器、只能通过网络共享可能存在文件锁定或者性能问题。

-只提供数据库级的锁定。

-没有用户账户概念,而是根据文件系统确定所有数据库的权限

查看全部

SharedPreferences适合存一些简单的数据,是一种轻量的存储方式

int string bool它的本质是基于xml文件存储key_value键值对的存储

通常用来存储一些简单的配置信息

查看全部

服务类型:

用于应用内部:本地服务

startservice  stopservice stopself stopselfresult

bindservice  unbindservice

android系统内部应用程序之间 :远程服务

查看全部

0

采集

收起

2018-09-29

通过 SharedPreferences.getXXX("KEY","") 获得对应Editor.putXXX("KEY","")保存的值

查看全部

实现SharedPreferences存储步骤:

1.获得SharedPreferences对象

SharedPreferences pref=PreferenceManager.getDefaultSharedPreferences(MainActivity.this);

SharedPreferences pref=getSharedPreferences("myPref",Mode_PRIVATE);

2.获得SharedPrederences.Editor对象

Editor editor=pred.edit();

3.通过Editor接口的putXxx方法保存key-value对其中Xxx表示不同的数据类型

editor.putString("name","张三");

editor.putInt("age",30);

editor.putLong("time",System,currentTimeMillis());

editor.putBoolean("default",true);

4.通过Editor接口的commit方法保存key-value对

editor.commit();

笔记附录:

1.附加代码:editor.remove(key);

2.取值:

pref.getString("name","");

pref.getInt("age",0);

查看全部

onBind中通过MyBinder返回当前服务对象

查看全部

0

采集

收起

2018-08-30

绑定式的服务跟启动源绑定在了一起,启动源Activity销毀前必须先解绑,不然会报错

查看全部

0

采集

收起

2018-08-30

this.getExternalFilesDir()获取外部存储位置跟内置的使用时一样的

查看全部

https://blog.csdn.net/u013365671/article/details/40678867

查看全部

0

采集

收起

2018-08-22

this.getFilesDir 当前应用默认的数据存储目录

查看全部

Broadcast(广播)

BroadcastReceiver-组件(广播接收器)

bcb89630c43c69ee79b0cb815b043f63.png

6dd03d919f5f7149be01a2bf93439c3b.png

17655fdcb1b71baa7ac0a482b753d327.png

2756f9ac3c136ed57627eb4351215f7b.png

0275366b934be677a0a6a4a78cf4df05.png

查看全部

0

采集

收起

2018-08-07

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值