天天看点

《第一行代码》读书笔记(第一章,第二章)

第一章 

分析你的第一个Android程序  2、gen 这个目录里的内容都是自动生成的,主要有一个R.java文件,你在项目中添加的任何资源都会在其中生成一个相应的资源id。这个文件永远不要动手去修改它。 3、asserts 这个目录用的不多,主要可以存放一些随程序打包的文件,在你的程序运行时可以动态读取到这些文件的内容。另外,如果你的程序中使用到了WebView加载本地网页的功能,所有网页相关的文件也都存放在这个目录下。 8、project.properties 这个文件非常地简单,就是通过一行代码指定了编译程序时所使用的SDK版本。

Android程序的设计讲究逻辑与试图分离,因此是不推荐在活动中直接编写页面的,更加通用的一种做法时,在布局文件中编写界面,然后在活动中引入进来。 Logcat中主要有5个级别。当前我们选中的级别是verbose。也就是最低等级。这意味着不管我们使用哪一个方法打印日志,这条日志一定会显示出来。

第2章 先从看得到的入手,探究活动 2.2.2 创建和加载布局 Android程序的设计讲究逻辑与视图分离,最好每一个活动都能对应一个布局。

2.3使用Intent在活动之间穿梭 Intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。Intent一般被用于启动活动、启动服务以及发送广播等场景。

Intent中,我们还可以在<Intent-filter>标签中再配置一个《data》标签,用于更精确地指定当前活动能够响应什么类型的数据,<data>标签中主要可以配置以下内容。 1、android:scheme:用于指定数据的协议部分,如上例中的http部分 。 2、android:host:用于指定数据的主机名部分,如上例中的www.baidu.com部分 。 3、android:port 用于指定数据的端口部分,一般紧随在主机名之后。 4、android:path:用于指定主机名和端口之后的部分,如一段王志忠跟在域名之后的内容 5、android:mimeType:用于指定可以处理的数据类型,允许使用通配符的方式进行指定。

2.3.5 返回数据给上一个活动  第54页  我们还是构建了一个Intent,只不过这个Intent仅仅用于传递数据而已,它没有任何意图。紧接着把要传递的数据存放在Intent中,然后调用了setResult()方法。这个方法非常重要,是专门用于向上一个活动返回数据的。

setResult()方法接受两个参数,第一个参数用于向上一个活动返回处理结果,一般只使用Result_ok或Result_Canceled这两个值,第二参数则是把带有数据的Intent传递回去。

由于我们是使用startactivityforresult()方法来启动SecondActivity的,在SecondActivity被销毁之后会回调上一个活动的onActivityResult()方法。

onActivityResult()方法带有三个参数,第一个参数requestCode,即我们在启动活动时传入的请求码,第二个参数resultCode,即我们在返回数据时传入的处理结果。第三个参数data,即携带着返回数据的Intent。

2.4活动的生命周期  Android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈也被做称作返回栈。栈是一种后进先出的数据结构,在默认情况下,每当我们启动了一个新的活动,它会在返回栈中入栈,并处于栈顶的位置。而每当我们按下back键或调用finish()方法去销毁一个活动时,处于栈顶的活动会出栈,这时一个入栈的活动就会重新处于栈顶的位置。系统总是会显示处于栈顶的活动给用户。

将活动分为三种生存期。 1、完整生存期  活动在onCreate()方法和onDestroy()方法之间所经历的,就是完整生存期。一般情况下,一个活动会在onCreate()方法中完成各种初始化操作,而在onDestory()方法中完成内存的操作。 2、可见生存期  活动在onStart()方法和onStop()方法之间所经历的,就是可见生存期。在可见生存期内,活动对用于总是可见的,即便有可能无法和用户进行交互。我们可以通过这两个方法,合理地管理那些对用户可见的资源。 3、前台生存期 活动在onResume()和onPause()方法之间所经历,就是前台生存期。在前台生存期内,活动总是处于运行状态的。

2.6.1 知晓当前是哪一个活动  Log.e("BaseActivity",getClass.getSimpleName());

2.6.2 随时随地退出程序  public class ActivityCollector{      public static List<Activity> activities=new ArrayList<Activity>();      public static void addActivity(Activity activity){           activities.add(activity);      }      public static void removeActivity(Activity activity ){          activities.remove(activity);       }      public static void finishAll(){           for(Activity activity:activitiese){                if(!activity.isFinishing()){                    activity.finish();                 }                }      } } 2.6.3 启动活动的最佳写法  public static void actionStart(Context context ,String data1,String data2){      Intent intent =new Intent(context,SecondActivity.class);      intent.putExtra("param1","data1");      intent.putExtra("param2","data2");      context.startactivity(intent); } XXXactivity.actionStart(FirstActivity.this,"data1","data2");

继续阅读