热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

广播broadcast查看全部0采集收起2019-02-09点击事件caseR.id.bind:绑定服务intent2newIntent(MainActivity.this,MyB

广播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



推荐阅读
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
author-avatar
薇洁诗婷梦添
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有