Android复习
第一章
1.Android系统架构:(四层)
Linux内核层:为安卓设备的各种硬件提供底层的驱动。
系统运行库层:为Android系统提供主要的特性支持。
应用框架层:提供了构建应用程序可能用到的各种API。
应用层:所有安装在手机上的应用程序都属于这一层。
2.Android系统四大组件:活动(activity)提供活动界面 服务(service)提供多线程或后台运行支持 广播接收器(broadcast receiver)提供系统与程序或程序与程序的通信机制 内容提供器(content provider)提供程序间共享数据的机制
3.开发环境需要的工具:JDK(Java语言的软件开发工具包)Android SDK(谷歌提供的Android开发工具包)Android studio(Android项目IDE开发工具)
4.安卓模拟器是模拟Android手机环境,用于Android app开发
注:app:项目中所有资源代码在此。
***5.使用Android的日志工具Log:
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Hello", Toast.LENGTH_SHORT).show();
}
});
Log.d("MainActivity","onCreate execute");
}
(在onCreate()方法中)
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_world_layout);
Log.d("HelloWorldActivity","onCreate execute");
}
注:Log.v()用于打印意义最小的,琐碎的日志信息。Log.d()用于打印一些调试信息。Log.i()用于打印一些警告信息。Log.e()用于打印程序中的错误信息。
5.手动创建活动步骤:close project再新建一个Android项目,可命名为ActivityTest,包名使用默认的。再选择Add No Activity手动创建活动finish。项目成功创建后,手动改为project模式,点击Java文件夹下com.example.activitytest包右键新建activity到empty activity,弹出对话框,命名,不要勾选generate layout和launcher activity这两个选项。勾选backwards compatibility,点击finish完成创建。
6.创建和加载布局:右击app/src/main/res目录new一个Directory,命名为layout,在对着layout目录右键new一个layout resource file,在新窗口将布局文件命名为first——layout,根目录默认,点击ok完成创建。接下来在活动中加载这个布局,重新回到FirstActivity,在onCreate()方法中加入:
public class FirstActivity extends AppCompatActivity{
protected void onCreate((Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
}
}
7.在AndroidManifest文件中注册活动:(修改后的AndroidManifest.xml文件)
<application
...>
//
//
***8.在活动中使用Toast(在onCreate()方法中)
添加如下方法:
protect void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
Button button1=(Button)findViewById(R.id.button_1);
button1.setOnClickLIstener(new View.onClickListener(){
@Override
public void onClick(View v){
Toast.makeText(FirstActivity.this,"You clicked Button1",
Toast.LENGTH_SHORT).show();
}
})
}
***9.使用显式Intent:
修改FirstActivity中按钮的点击事件,代码如下所示:
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Intent intent =new Intent(FirstActivity.this,SecondActivity.class);
startActivity(intent);
}
});
***10.向下一个活动传递数据:
imageView.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Intent intent = new Intent(MainActivity.this,DetailActivity.class);
intent.putExtra("title",news0.title);
intent.putExtra("content",news0.content);
intent.putExtra("Source",news0.Source);
intent.putExtra("Time",news0.Time);
startActivityForResult(intent,2);
}
});
比如说FirstActivity中有个字符串,现在想把这个字符串传递到Second-Activity中,则:
button1.setOnClickListener(new View.OnClickListener(){
@override
public void onClick(View v){
string data ="Hello SecondActivity";
Intent intent =new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("extra_data",data);
startActivity(intent);
}
});
在把SecondActivity中传输的数据取出,并打印出来,代码如下:
public class SecondActivity extends AppCompatActivity{
@override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R,layout.second_layout);
Intent intent = getIntent();
String data=intent.getStringExtra("extra_data");
log.d("SecondActivity",data);}
}
***11.返回数据给上一个活动
修改firstactivity中按钮的点击事件
button1.setOnClickListener(new View.OnClickLIstener(){
@override
public void onClick(View v){
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
startActivityForResult(intent,1);
}
});
在secondactivity中给按钮注册点击事件,并添加返回数据的逻辑
public class SecondActivity extends AppConpatActivity{
@override
protected void onCreate(Bundle saveInstanceState){
super.onCreate(saveInstanceState);
setContentView(R.layout.second_layout);
Button button2 =(Button) findViewByid(R.id.button_2);
button2.setOnClickListener(new View,onClickListener(){
@override
public void onClick(View v){
Intent intent = new Intent();
Intent.putExtra("data_return","Hello FirstActivity");
setResult(RESULT_OK,intent);
finish();
}
});
}
}
我们还需要在FirstActivity中重写这个方法来得到返回的数据
@override
protected void onActivityResult(int requestCode,int resultCode,Intent data){
Switch (requestCode){
case 1:
if(resultCode == RESULT_OK){
string returnedData = data.getStringExtra("data_return");
Log.d("FirstActivity",returnedData);
}
break;
default;
}
}
在secondactivity中重写onBackPressed()方法
@override
public void onBackPressed(){
Intent intent = new Intent();
intent.putExtra("data_return","Hello FirstActivity");
setResult(RESULT_OK,intent);
finish();
}
12.活动的生命周期:活动(栈顶)-暂停-停止-销毁 完整生存期-可见生存期-前台生存期
13.碎片的创建:
在layout目录上右键选择new-fragment-fragment(blank)
14.动态添加碎片(重点)
Public class detailFragment extends Fragment{
@Override
Public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle saveInstanceState){
View view = inflater.inflate(R.layout.detail_fragment,container,false);
return view;
}
}
15.广播机制:1标准广播完全异步执行的广播,发出后所有广播接收器同时接收到广播消息。
2有序广播:是同步执行的广播,发出后优先级高的收到,逻辑执行完毕后才会继续传播。
16.发送自定义广播(标准,有序)以及接受(重点)
MainActivity的代码
public class MainActivity extends AppC ompatActivity (
@0verride
protected void onCreate (Bundle savedInst anceState) (
sup er. onCreate (savedInstanceState);
setContentVi ew (R. layout. activity_ .main);
Button btnSend= (Button) findViewById(R. id. btnSend);btnSend. setOnCli ckListener ((v) + [
Intent intent=new Intent ();
intent. setAction(" com. example. myapplication. broadcast");intent. putExtra(" extr aKey", "CustomValue"); .sendBroadcast (intent):[
));
))
继承BroadcastReceiver,实现其onReceive方法 接收第一个APP发出的广播并在后台日志输出
public class MyReceiver extends BroadcastReceiver (
private static final String TAG = "MyReceiver";public MyReceiver () [
@0verride
public void onReceive (Context context, Intent intent) {
if (intent. getAction()). equals(" com. example. myapplication. broadcast")){
String extraKey=intent. getStringExtra(" extraKey");
Ioast. makeText (context, "接受到的自定义广播数据为: "+extraKey, Toast. LEIGTH_ SH0RT). show O;
Log. d(TAG, "接受到另一个app的自定义广播数据为:"+extraKey);
}}}
AndroidMainfest.xml添加如下代码
静态广播接收器声明权限
静态注册
17.SQLite数据库存储——创建数据库,添加数据(关键)
新建一个NewsDB类,在类里面设计数据库:
public class NewsDB extends SQLiteOpenHelper{
@Override
Public void onCreate(SQLiteDatabase db){
String sql =”ccreate table NewsTable(“
+”nID integer primary key autoincrement,”
+”Title text,”
+”Content text,”
+”Source text,”
+”Time text”)”;
db.execSQL(sql);
}
插入数据
Public void initData(){
Cursor cursor=queryBySQL(“select count(*)num from NewsTable”);
If(cursor!=null&&cursor.moveToFirst()){
If(cursor.getInt(cursor.getColumnIndex(“num”))==0){
SQLiteDatabass db =getWritableDatabase();
db.execSQL(“insert into NewsTable(Title,Content,Source,Time)values(‘xxx’,’x’,’x’,’x’)”);
}
}
Cursor.close();
}
18.ContentResolver的用法接受系统数据(重点)
private void readContacts(){
Cursor cursor=null;
cursor=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,null,null,null
);
if(cursor!=null){
while (cursor.moveToNext()){
//获取联系人姓名
String name= cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
//获取联系人电话
String number= cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
contactsList.add(name+"\n"+number);
}
adapter.notifyDataSetChanged();
}
}
19.URI统一资源标识符,用于标识某一外部资源名称的字符串 。
20.线程间通讯,声明,调用(重点)异步机制
//开始按钮
btnStrat.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
value=Integer.valueOf(editText.getText().toString());
thread=new Thread(new Runnable() {
@Override
public void run() {
while (value>=0 &&!isPause){
value--;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.sendEmptyMessage(value);
}
}
});
thread.start();
isPause=false;
}
});
Android复习的更多相关文章
- Android复习资料
转载:http://blog.csdn.net/huachao1001/article/details/53156582 在10月份开始就没有再参与校招了,面试过程真的很累,有时现场等面试一等就是几个 ...
- android复习第一天-----简单的android常识
前言:要去面试了,这些天花一些事件把android中简单的知识点来串联的复习一下 1,android中的工程结构 src文件夹:存储android文件的源代码 gen文件夹:有工具自动生成,不要去修改 ...
- Android复习笔记--架构与版本
#Android架构: 1. Linux 内核层 Android 系统是基于Linux 2.6 内核的,这一层为Android 设备的各种硬件提供了底 层的驱动,如显示驱动.音频驱动.照相机驱动.蓝牙 ...
- Android复习笔记--Intent
Intent是Android中各组件跳转的重要方式,一般可悲用于启动活动.启动服务.以及发送广播等场景. #显示Intent 主要主要用于启动已知的组件 //发送方 Intent intent = ...
- Android复习笔记--Activity
#Activity注册 Android四大组件(Activity,Service,Broadcast Receiver, Content Provider)都需要在AndroidManifest中注册 ...
- Android复习指南
基础无外乎几部分:语言(C/C++或java),操作系统,TCP/IP,数据结构与算法,再加上你所熟悉的领域.这里面其实有很多东西,各大面试宝典都有列举. 在这只列举了Android客户端所需要的和我 ...
- android复习第二天------布局
1,在4,0版本前一共有五种布局,且都是ViewGroup的子类分别是 RelativeLayout(相对),AbsoluteLayout(绝对),LinearLayout(线性),FrameLayo ...
- 【Android 复习】:第02期:引导界面(二)使用ViewPager实现欢迎引导页面
一.实现的效果图 也许是养成了这样一个习惯,每次看别人的代码前,必须要先看实现的效果图达到了一个什么样的效果,是不是跟自己想要实现的效果类似,有图才有真相嘛,呵呵. 二.编码前的准 ...
- 【Android 复习】:第01期:引导界面(一)ViewPager介绍和使用详解
一.ViewPager实现的效果图 二.ViewPager实现的功能 看到上面的效果图,想必大家已经猜出了这个类是干吗用的了,ViewPager类提供了多界面切换的新效果, 新效果有如下特征: < ...
- 【Android 复习】:Android之ViewFlipper(二)
通过手势移动屏幕 上面是通过屏幕上的按钮来在屏幕间切换的,这看起来多少有点不符合Android的风格,如果要是能通过手势的左右滑动来实现屏幕的切换就比较优雅了. 通过android.view.Gest ...
随机推荐
- 天线增益英文名称:antenna gain
天线增益是指:在输入功率相等的条件下,实际天线与理想的辐射单元在空间同一点处所产生的信号的功率密度之比.它定量地描述一个天线把输入功率集中辐射的程度.增益显然与天线方向图有密切的关系,方向图主瓣越窄, ...
- 查看CentOS系统配置情况命令
系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # ho ...
- 【Java面试题】57 short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
Java规范有这样的规则 [ 1.高位转低位需要强制转换 2.低位转高位自动转. ] short s1 = 1; s1 = s1 + 1;有什么错? 答: i 是int 型 s1 short型 通 ...
- c++ list sort
1. bool operator < (S & b) { return ID < b.ID; } struct S { std::string firstn ...
- 【scrapy】相关
http://www.cnblogs.com/mophee/archive/2009/03/12/1409562.html css选择器中的空格 http://www.crummy.com/softw ...
- 动态提交使用jQuery 完成ajax 文件下载----后端php
1.js代码 // Ajax 文件下载 //当不用传参时,可以将data去掉 jQuery.download = function(url, data, method){ // 获得url和data ...
- mongodb php auto increment 自增
mongodb的自增实现根oracle,postgresql是差不多,都是通过计数器来实现的. oracle自增实现: 实例说明oracle序列用法 postgresql自增实现: postgresq ...
- 第四章 Spring.Net 如何管理您的类___IObjectPostProcessor接口
官方取名叫 对象后处理器 (object post-processor) , 听起来很高级的样子啊!实际上就是所有实现了这个接口的类,增加了两个方法. Spring.Objects.Factory.C ...
- python2.0_day18_Django自带的用户认证模块的使用
用户验证我们基于一个项目来学习利用Django框架中的user表实现用户认证Django练习小项目:学员管理系统设计开发 项目需求: 1.分讲师\学员\课程顾问角色, 2.学员可以属于多个班级,学员成 ...
- hadoop程序MapReduce之DataSort
需求:对文件中的数据进行排序. 样本:sort.log 10 13 10 20 输出:1 10 2 10 3 13 4 20 分析部分: mapper分析: 1.<k1,v1>k1代表:行 ...