android基本知识(一)

今天开始更新一下android的基本知识,下面是敲代码遇到的问题。

1)我们来谈谈android.intent.category.DEFAULT的用途。

    在谈这个tag的用途之前,读者要明白什么是implicit intent还有什么是explicit intent。即什么是隐式intent还有显式intent。

我想这个问题不难。如下:

①。显示intent

  1. Intent intent = new Intent(MainActivity.this,SecondActivity.class);
  2. startActivity(intent);

在代码可以直接看到上下两个活动,=。

②。隐式intent

  1. Intent intent2 = new Intent("com.example.intenttest.ACTION_START");
  2. intent2.addCategory("com.example.intenttest.MY_CATEGORY");
  3. startActivity(intent);

隐式intent通过action,category,和data来进行匹配,匹配大致如下

  1. <activity
  2. android:name=".SecondActivity"
  3. android:label="@string/app_name">
  4. <intent-filter >
  5. <action android:name="com.example.intenttest.ACTION_START"/>
  6. <category android:name="android.intent.category.DEFAULT"/>
  7. <category android:name="com.example.intenttest.MY_CATEGORY"/>
  8. </intent-filter>
  9. </activity>

如果少了android.intent.category.ACTION_START则会发生会找到相匹配的intent的错误。

2)startActivityForResult()的用法。

如果一个Activity在运行之后想要返回数据给上一个启动它的Activity,那么可以使用startActivityForResult()方法。

该方法的使用步骤例子如下;

1)在MainActivity里面启动SecondActivity,传入请求码,也就是requestCode:

  1. Intent intent = new Intent(MainActivity.this,SecondActivity.class);
  2. startActivityForResult(intent,1);

2)在SecondActivity里面新建一个intent对象,封装好想要传递的数据之后,然后用putExtra方法传递相关的数据:

  1. Intent intent = new Intent();
  2. intent.putExtra("extra_data", "我返回数据了");
  3. setResult(RESULT_OK, intent);
  4. finish();

3)在最后MainActivity里面得到返回的数据:

  1. @Override
  2. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  3. switch (requestCode) {
  4. case 1:
  5. if(RESULT_OK == resultCode){
  6. String extra_data = data.getStringExtra("extra_data");
  7. Log.i("extra_data",extra_data);
  8. }
  9. break;
  10. default:
  11. break;
  12. }
  13. };

其中onActivityResult为回调函数,三个参数分别为请求码,回执码,还有传送的数据。

4)安卓活动的声明周期:

相信很多读者都知道安卓的生命周期包括七个函数,其中onCreate与onDestroy对应,它们所对应的生命周期的完整的生命周期;onStart与onStop对应,它们所对应的生命周期是可见的生命周期;onResume与onPause对应,它们所对应的生命周期是前台生命周期;

这里我们来说说onPause与onStop的区别。onPause在活动被切换到后台时发生,例如出现一个Dialog。而onStop是一个活动完全给另外一个活动覆盖的时候调用。我们可以在onPause方法保存程序的关键数据。代码大致如下:

  1. public class MainActivity extends ActionBarActivity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. requestWindowFeature(Window.FEATURE_NO_TITLE);
  6. setContentView(R.layout.activity_main);
  7. Log.i("Life Tag", "OnCreate");
  8. Button normalButton = (Button)findViewById(R.id.normal_button);
  9. Button dialogButton = (Button)findViewById(R.id.dialog_button);
  10. EditText tempText = (EditText)findViewById(R.id.login_name);
  11. if(null != savedInstanceState){//利用Bundle对象来还原之前在内存回收活动时,保存的关键数据
  12. String tempData = savedInstanceState.getString("tempName");
  13. Log.i("Tag", tempData);
  14. tempText.setText(tempData);
  15. }
  16. //测试安卓活动的七个生命周期,利用对话框活动和完全覆盖活动来区别onPause和onStop方法
  17. normalButton.setOnClickListener(new OnClickListener() {
  18. @Override
  19. public void onClick(View v) {
  20. // TODO Auto-generated method stub
  21. Intent intent = new Intent(MainActivity.this,NormalActivity.class);
  22. startActivity(intent);
  23. }
  24. });
  25. dialogButton.setOnClickListener(new OnClickListener() {
  26. @Override
  27. public void onClick(View v) {
  28. // TODO Auto-generated method stub
  29. Intent intent = new Intent(MainActivity.this,DialogActivity.class);
  30. startActivity(intent);
  31. }
  32. });
  33. }
  34. @Override
  35. protected void onStart() {
  36. // TODO Auto-generated method stub
  37. super.onStart();
  38. Log.i("Life Tag", "onStart");
  39. }
  40. @Override
  41. protected void onResume() {
  42. // TODO Auto-generated method stub
  43. super.onResume();
  44. Log.i("Life Tag", "OnResume");
  45. }
  46. @Override
  47. protected void onPause() {
  48. // TODO Auto-generated method stub
  49. super.onPause();
  50. Log.i("Life Tag", "OnPause");
  51. }
  52. @Override
  53. protected void onStop() {
  54. // TODO Auto-generated method stub
  55. super.onStop();
  56. Log.i("Life Tag", "onStop");
  57. }
  58. @Override
  59. protected void onDestroy() {
  60. // TODO Auto-generated method stub
  61. super.onDestroy();
  62. Log.i("Life Tag", "onDestroy");
  63. }
  64. @Override
  65. protected void onRestart() {
  66. // TODO Auto-generated method stub
  67. super.onRestart();
  68. Log.i("Life Tag", "OnRestart");
  69. }
  70. //在内存不足时回收活动,保存其主要关键数据,这在用户体验还是比较重要的了。
  71. @Override
  72. protected void onSaveInstanceState(Bundle outState) {
  73. // TODO Auto-generated method stub
  74. super.onSaveInstanceState(outState);
  75. EditText tempText = (EditText)findViewById(R.id.login_name);
  76. String name = tempText.getText().toString();
  77. outState.putString("tempName", name);
  78. Log.i("Name_Tag", name);
  79. }

5)活动的四个启动模式:

安卓活动启动模式共有四个:standard(默认的启动模式),singalTop,singalTask,singalInstance

在说启动模式之前我们先来说一个概念:返回栈

返回栈是一种栈的数据结构,也即符合FILO的原则。所有Activity的集合存放在这个栈中,新覆盖的活动会在栈顶的位置,也就是说栈顶的活动时可见的。

standard(默认启动模式)

返回栈存放许多活动,但是使用standard方式启动之后,系统不会在乎返回栈中是否存在一个同样的活动,只要启动它,就会重新创建一个活动的实例。

singalTop启动模式:

当返回栈栈顶已经存在存在一个活动的时候,例如是FirstActivity,如果这个时候时候再启动FirstActivity的时候,因为这个活动已经存在栈顶,所以不会在创建一个FirstActivity活动的实例。

singalTask启动模式:

其实仔细想想,上面singalTop模式还是有许多不不足的地方,例如,新启动一个名为SecondActivity的活动,而返回栈其实早就有这个活动,那么,直接运用返回栈的这个SecondActivity的活动,不用新创建一个活动。你猜对了,singalTask模式就是这么一种启动启动模式。

singalInstance启动模式:

singgalInstance算是这几种模式最复杂的一种启动模式了。singalInstance模式提出是为了解决共享活动实例的问题。那么什么是共享活动实例呢?共享活动也就是说你的应用程序里面的某个(也能是几个)活动是允许其他应用程序调用的(最经常看见的应该是支护宝客户端吧。)那么singalInstance将会很好的解决的这个问题。这个模式我们用代码来试验一下:

①MainActivity.java

  1. protected void onCreate(Bundle savedInstanceState) {
  2. super.onCreate(savedInstanceState);
  3. setContentView(R.layout.activity_main);
  4. Button secondButton = (Button)findViewById(R.id.secondButton);
  5. Log.i("TAG", "The task is"+getTaskId());
  6. secondButton.setOnClickListener(new OnClickListener() {
  7. @Override
  8. public void onClick(View v) {
  9. // TODO Auto-generated method stub
  10. Intent intent = new Intent(MainActivity.this,SecondActivity.class);
  11. startActivity(intent);
  12. }
  13. });
  14. }

②SecondActivity

  1. protected void onCreate(Bundle savedInstanceState) {
  2. // TODO Auto-generated method stub
  3. super.onCreate(savedInstanceState);
  4. requestWindowFeature(Window.FEATURE_NO_TITLE);
  5. setContentView(R.layout.activity_second);
  6. Log.i("TAG", "The task is"+getTaskId());
  7. Button thirdButton = (Button)findViewById(R.id.third_button);
  8. thirdButton.setOnClickListener(new OnClickListener() {
  9. @Override
  10. public void onClick(View v) {
  11. // TODO Auto-generated method stub
  12. Intent intent = new Intent(SecondActivity.this,ThirdActivity.class);
  13. startActivity(intent);
  14. }
  15. });
  16. }
  17. }

③ThirdActivity

  1. protected void onCreate(Bundle savedInstanceState) {
  2. // TODO Auto-generated method stub
  3. super.onCreate(savedInstanceState);
  4. requestWindowFeature(Window.FEATURE_NO_TITLE);
  5. setContentView(R.layout.activity_third);
  6. Log.i("TAG", "The task is"+getTaskId());
  7. Button firstButton = (Button)findViewById(R.id.firstButton);
  8. firstButton.setOnClickListener(new OnClickListener() {
  9. @Override
  10. public void onClick(View v) {
  11. // TODO Auto-generated method stub
  12. Intent intent = new Intent(ThirdActivity.this,MainActivity.class);
  13. startActivity(intent);
  14. }
  15. });
  16. }
  17. }

打印的信息如下:

来自为知笔记(Wiz)

时间: 2024-11-09 05:54:07

android基本知识(一)的相关文章

Android基础知识(6)—数据持久化之数据存储

阅读前,请浏览此处上方目录. Android基础知识(6)-数据持久化之数据存储 本章内容为个人笔记,参考书籍有:<疯狂的android>第3版.<第一行代码> 首先,我们要知道什么是数据持久化. 数据持久化就是指那些内存中的瞬时数据保存到存储设备中,保证即使手机在关机的情况下,这些数据不会丢失.保存在内存中的数据是处于瞬时状态,保存在存储设备中的数据是处于持久状态.持久化技术则是提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换. Android系统主要提供了三种方式用于简

android基础知识13:AndroidManifest.xml文件解析

1.重要性 AndroidManifest.xml是Android应用程序中最重要的文件之一.它是Android程序的全局配置文件,是每个 android程序中必须的文件.它位于我们开发的应用程序的根目录下,描述了package中的全局数据,包括package中暴露的组件 (activities, services, 等等),以及他们各自的实现类,各种能被处理的数据和启动位置等重要信息. 因此,该文件提供了Android系统所需要的关于该应用程序的必要信息,即在该应用程序的任何代码运行之前系统所

Android JNI知识简介

Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互.JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) 内部运行的 Java 代码能够与用其它编程语言(如 C.C++ 和汇编语言)编写的应用程序和库进行交互操作. 1.从如何载入.so档案谈起 由于Android的应用层的类都是以Java写的,这些Java类编译为Dex型式的Bytecode之后,必须靠Dalvik虚拟机(VM: Virtual Machine)

Android基础知识【项目实训】【1】

[该项目实训是Android基础知识的一个综合练习] [项目题目]:校园订餐App设计 综合案例 [设计目标] 1.必要功能 ?快餐店浏览,与订餐 ?今天订餐活动查询与订餐,特价饭菜预定 ?分类订餐查询,预定 ?常定饭菜  预定 ?健康餐推荐 ?定时预定,提前预定 ?订单查看, ?餐馆与饭菜打分,评价 ?用户注册与登录 2.扩展选择功能 ?快速拨打电话 ?饮食跟踪,热量估算 ?系统设置 [项目说明] 该项目为实际应用项目的单机 简化版本,只需要完成Android平台App的设计与开发工作. Ap

Android基础知识【项目实训】【2】

[该项目实训是Android基础知识的一个综合练习,特别提示:项目中会用到一些图片素材,都是随意整理的,稍后会上传一个资源,包含该事项项目的基本功能,也含有图片素材] [项目题目]:校园订餐App设计 综合案例 [目标] 因为项目只涉及基础知识,因此项目中所用数据并不联网,都读取单机数据库.(即将该项目中所用数据,如菜品信息.店铺信息等存入数据库)用户在第一次打开该项目时,会在用户手机上创建这些数据库,并插入测试数据. 1.先制作一个欢迎界面,欢迎的同时,准备数据库 欢迎界面Activity对应

Android基础知识【项目实训】【3】

[该项目实训是Android基础知识的一个综合练习,特别提示:项目中会用到一些图片素材,都是随意整理的,稍后会上传一个资源,包含该事项项目的基本功能,也含有图片素材] [项目题目]:校园订餐App设计 综合案例 [目标] 欢迎界面过后,应该显示app的主界面了,根据[UI设计指导]中的规划,主界面采用上下两级标签导航.这部分是app开发中比较麻烦的一块. 1.先来看一下,最终的效果吧,这样做起来比较有底: 默认显示的主界面,下部是主导航,上面是二级导航,默认打开的是"促销打折"这一版面

Android基本知识

     Android是Google公司于2007年发布的基于Linux内核的手机操作系统.应用层主要以java为编程语言,应用层分为两层,函数层(Library) 和虚拟机(Virtual).中间层多以Java实现,采用自主开发的Dalvik虚拟机(基于寄存器的Java虚拟机,传统的为基于堆栈),输入Java字节码,Dalvik虚拟机使用的为dex格式的输入文件,而不是传统的字节码class文件.      下图为Android系统框架           整个Android系统从上往下分为

Android基础知识【项目实训】【4】

[该项目实训是Android基础知识的一个综合练习,特别提示:项目中会用到一些图片素材,都是随意整理的,稍后会上传一个资源,包含该事项项目的基本功能,也含有图片素材] [项目题目]:校园订餐App设计 综合案例 [目标] 主界面的功能确实比较复杂,因此上一篇知识说的周边内容.现在开始说这个界面的代码和布局文件. 1.先看一下项目的组织结构吧,要不然不好说他们的关系: (1)db包中的都是跟 数据库相关的 (2)eatall中放的都是activity或者fragment (3)entity中放的实

Android基础知识【项目实训】【5】

[该项目实训是Android基础知识的一个综合练习,特别提示:项目中会用到一些图片素材,都是随意整理的,稍后会上传一个资源,包含该事项项目的基本功能,也含有图片素材] [项目题目]:校园订餐App设计 综合案例 [目标] 主界面中包含两个二级子界面,分别是活动界面和账单界面,下面介绍它们的实现代码和布局文件. 1.下面这个是 活动界面的Activity代码,因为这个界面加载时需要 读取数据库中数据了,所有功能的实现上会涉及到 db那个包中一些类. 注意这个Activity也是继承 Activit

看看android基础知识,谁帮我作答

不管怎么着,了解一点android的基本知识还是有必要的,就当开阔一些自己的眼界吧.... android的四大功能组件是_activity_,_service_,_BroadcastReceive广播接收器_,_Content Provider_. android的系统架构是android,_java_虚拟机和_linux_操作系统. 在Activity的___distoryed______状态和__stop_情况下,系统可能会回收Activity. ActivityA中的某个Button的o