今天开始更新一下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. }
打印的信息如下:







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

  1. Xamarin Android教程Android基本知识版本介绍与系统介绍

    Xamarin Android教程Android基本知识版本介绍与系统介绍 Xamarin Android教程Android基本知识版本介绍与系统介绍,开发Andriod有时候不像iOS一样轻松,因为 ...

  2. [转]【eoeAndroid索引】史上最牛最全android开发知识汇总

    一.开发环境搭建 (已完成) 负责人:kris 状态:已完成 所整理标签为:搭建 SDK JDK NDK Eclipse ADT 模拟器 AVD 调试器(DEBUG) DDMS 测试 日志 Logca ...

  3. Android基本知识

         Android是Google公司于2007年发布的基于Linux内核的手机操作系统.应用层主要以java为编程语言,应用层分为两层,函数层(Library) 和虚拟机(Virtual).中间 ...

  4. 【Xamarin开发 Android 系列 4】 Android 基础知识

    原文:[Xamarin开发 Android 系列 4] Android 基础知识 什么是Android? Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Li ...

  5. 第01讲- Android背景知识

    第01讲Android背景知识 Android是基于Linux系统 Android系统框图 : 第一.操作系统层(OS) 第二.各种库(Libraries)和Android 运行环境(RunTime) ...

  6. 写给Android App开发人员看的Android底层知识(1)

    这个系列的文章一共8篇,我酝酿了很多年,参考了很多资源,查看了很多源码,直到今天把它写出来,也是战战兢兢,生怕什么地方写错了,贻笑大方. (一)引言 早在我还是Android菜鸟的时候,有很多技术我都 ...

  7. 打造自己的Android常用知识体系

    前言 Android常用知识体系是什么鬼?所谓常用知识体系,就是指对项目中重复使用率较高的功能点进行梳理.注意哦,不是Android知识体系. 古语道:学而不思则罔,思而不学则殆.如果将做项目类比为“ ...

  8. Android基础知识巩固:关于PendingIntent和广播

    平时使用广播的场合比较多,但细节的东西,看过了也没有总结,以至于某些场合有小问题,还是要把原理和属性搞清楚才能运用自如. 其实也是自己比较懒,先看别人的blog,有个概念再去官网看英文的能好理解一些. ...

  9. Android基础知识-1

    1.Android的Activity任务栈 在Android的系统中,在APP运行时每个APP都会默认有一个任务栈,任务栈的名称以APP的包名命名.任务栈是一中先进后出的结构,APP中每一个调用的Ac ...

随机推荐

  1. Xcode5和ios7下交叉编译ffmpeg

    先申明本机环境 dev-mini:ffmpeg devone$ sw_vers  ProductName:    Mac OS X ProductVersion:  BuildVersion:   1 ...

  2. ACCESS-字符函数

    mid:等于delphi中的COPY举例str="123456"mid(str,2,1)的意思是在str字符串中从第2个字符开始取得一个字符,结果为2注意:下标是从1开始,而不是从 ...

  3. SQL 正则表达式使模式匹配和数据提取变得更容易

    SQL Server 2005 正则表达式使模式匹配和数据提取变得更容易 David Banister 本文讨论: 使用正则表达式进行高效的 SQL 查询 SQL Server 2005 对正则表达式 ...

  4. CentOS6.2下安装eclipse

    在eclipse官网下载eclipse的linux版本(此处省略下载过程),我下载的是eclipse-jee-indigo-SR2-linux-gtk.tar.gz,下面是安装过程:  1.sudo ...

  5. Yale CAS + .net Client 实现 SSO 的完整版

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  6. 【24】若所有参数皆需类型转换,请为此采用non-members函数

    1.令class支持隐式类型转换,往往是个糟糕的主意.但有些情况是合理的,比如数值类型.考虑,有理数Rational有分子,分母两个字段,缺省参数值为0,1.Ration a = 2;我们期望构造一个 ...

  7. ThinkPHP3.1快速入门(12)自动验证

    自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证. 验证规则 数据验证可以进行数据类型.业务规则.安全判断等方面的验证操作.数据验证有两 ...

  8. COM编程VS实践

    目录 1. 2. 2.1. 2.2. 2.3. 3. 3.1. 3.2. 3.3. 1.COM实践简介 因需要对Office系列进行程序操作,特研究了一下COM相关的编程. 个人体会:COM面向接口编 ...

  9. There is no Action mapped for namespace [/pages/action/student] and action name [findStudent]

    1.错误描写叙述 2014-7-13 2:38:54 org.apache.jasper.compiler.TldLocationsCache tldScanJar 信息: At least one ...

  10. 什么是集群(cluster)

    1.集群 1.1 什么是集群 简单的说,集群(cluster)就是一组计算机,它们作为一个总体向用户提供一组网络资源.这些单个的计算机系统就是集群的节点(node).一个理想的集群是,用户从来不会意识 ...