《第一行代码》复习遗漏重难点整理1-2章

来源:互联网 发布:阶乘java递归方法 编辑:程序博客网 时间:2024/06/10 23:16

1.1Android系统架构

Android的系统架构大致可以分为四层架构,5层区域

四层架构:Linux内核层,系统运行库层(库层,运行时库),应用框架(API),应用层

五大区域(Linux内核层,系统运行库层(库层,运行时库),应用框架(API),应用层)   只 是系统运行层分为了两个区域,运行时库和库层

1.2Android应用开发特色

  1、四大组件(活动,服务,广播接收器,内容提供器)

   2、丰富的控件

   3、SQLite数据库

   4、地理位置定位

   5、强大的多媒体

   6、传感器

1.3各个文件夹的内容

    gen  存放R.java(自动添加我们添加的ID)

    assets,主要存放一些随系统打包的文件,程序运行时可以动态读取这些文件。webView加载本地网页,所有网页相关文件都存放在这里。

    AndroidManifest.xml    还可以重新制定最低兼容版本和目标版本

    project.properties 通过一行代码指定所使用的SDK

<activity

.............................

      <intent-filter>

       <action android:name="android.intent.action.MAIN"/>

       <category android:name="android.intent.category.LAUNCHER"/>

    </intent-filter>

表示这个活动是住活动。

_________________________________________________________________________分割线

@Override

    public boolean onCreateOptionsMenu(Menu menu){

    getMenuInflater().inflate(R.menu.hello_world,menu);

     return true;

}
}

这个是用来创建菜单的。在res里新建一个菜单文件夹,在里面新建一个Xml用来配置菜单

————————————————————————分割线————————————————————

在xml里面比如

  android:text="@string/hello_world"

这里面hello_world是一个键值对应value文件夹里面string.xml里面的

       <resources>

                <string name="hello_world">Hello world!</string>

 

_____________________________分割线_________________________________________

res里面之所以有多个drawable文件夹是为了适应不同分辨率(比如平板和手机)

______________________________________________________________________________

AndroidManifst.xml可以更换应用程序图标。string.xml里面则是可以改应用名

_____________________________分割线__________________________________________

Log 优先级顺序v(琐碎信息)<d(调试信息)<i(重要数据信息)<w(警告)<e(错误)


里面传入两个参数,一个是tag(一个标签,用于过滤器的过滤功能),一个是打印的内容(msg  即是message)

____________________分割线__________________________________________________

System.out.println()的缺点,打印日志没有级别分类,不能确定打印时间,不能添加过滤器

___________________________________分割线____________________________________





第二章


2.1活动是什么

  活动是一种可以包含用户界面的组建,主要用于和用户进行交互。

 ——————————————————————————————

android程序设计讲究逻辑和视图的分离

——————————————————————————————

android:id是给当前元素定义一个标识符


——————————————————————————————

所有的活动都要注册不然容易闪退崩溃。

————————————————分割线————————————————————————

程序其实可以不加主活动申明,不过这种程序一般无法在启动器看到或者打开,一般作为第三方服务以供调用,比如支付宝快捷支付

————————————————分割线——————————————————————————————

隐藏标题栏的方法:  在加载布局前(setContentVIew)这样写 requestWindowFeature(Window.FEATURE_NO_TITLE) 不在加载布局前会报错

————————————————————————分割线——————————————————————————————————

findViewById()方法返回的是一个View对象,所以才要在前面颊(Button)这种进行下转型。

——————————————————————————————————————————————分割线————————————

怎样配置Menu的Xml

<..............................................

    <item

          android:id="@+id/add_item"

           android:id="@+od/add"/>


</menu>

item标签用来创建一个菜单项

title给菜单项名字


之后在活动中定义响应事件 ,就是点击菜单项后的事件


public boolean onOptionsItemSelected(MenuItem item){

     switch(item.getItemId()){

    case:

  case:

   default:


}

return true;

}

_________________________________________________________分割线

显式Intent

 活动要注册!

    Intent intent=new Intent(上下文,目标类);

  startActivity(intent);

}


隐式Intent

 1、对目标类的注册(AndroidManifest。xml)进行修改

    增加<intent -filter>

                <action  android:name="com.example.activitytest.ACTION_START"

                <category android:name="android.intent.category.DEFAULT"/>

          

  2、在Intent intent=new Intent(传入action)

        startActivity(intent);

       只有action和category都符合的活动才会被调用。如果有两个以及以上,则会弹出对话框让你选择一个

       Category可以调用addCategory(传入category),上面默认的category不需要传入。

         一个Intent里面只可以传入一个action,但可以传入多个category。


         如果intent没有可以响应的东西,就会崩溃或者闪退

       ————————————————————————————

    在intent中传入Intent。ACTION_VIEW

    然后intent.setData(Uri.parse("网址")可以调用网页

————————————————————————————————

    注册文件中

      活动里面的data标签里面可以指定活动可以响应的活动可以响应什么类型的数据。scheme是协议,host是主机名(www....com)  port是端口部分。mimeType数据类型。

————————————————————————————————————————————————————————————————


Intent里面传入ACTION_DIAL调用拨号界面

————————————————————————————

Intent传递数据

   给下一活动传递数据,直接添加一条intent。putExtra(“键名”,数据);

                                             然后在那个活动中 getIntent(),然后getStringExtra(“传入键名”);


  给上个活动传递   必须要用startActivityForResult()传递intent,传入一个intent和一个请求码

                             在下一个活动中,putExtra,之后,setResult(RESULT_OK,intent)

                           然后在目标活动中重写onActivityResult()方法。

                                onActivityResult(int requestCode,int resultCode,Intent data)『

                                           switch(requestCode)

                                                 case 1;

                                                case

注意用BackPress无法返回。除非putExtra,setResult放在Backpress里面。

_________________________________________________________________________________________

 一个任务就是一组存放在栈里的活动

生存期在56-57页


—————————————————————————————————————————————————————————————————————————————对话框活动

要在注册的时候在activity中添加主题android:theme="@android:style/Theme.Dialog"



___________________________________________________________________________________________________________

为了防止活动因为内存不足而被回收导致的数据丢失

        可以用onSaveInstanceState()回调方法来解决

   @Override

  protected void onSaveInstanceState(Bundle outState){
         super.onSaveInstanceState(outState);

          String tempData=...

          outState.putString("键名“,temDate);

  然后在onCrete里面取出

      if(savedInstanceState!=null){

                String tempDate=savedInstanceState.getString("data_key");

}知道为什么oncrete里面老是传入Bundle saveInstanceState了吧

活动的启动模式

   standard  有可能创建多个相同活动的实例

   singleTop  如果栈顶活动已经存在要开始的活动,就不会创建新的实例。但是如果要创建的不是栈顶实例,则可能有多个比如12121这种就有多个

   singleTask,不会创建多个实例,每次都会检查实例是否已经存在

  singleInstance 会新建一个返回栈


   用getTaskId的方法可以看到任务的Id从而确定多个活动是否在同一个栈

————————————————————————————————————————————————————

如何知道当前是哪一个活动

  新建一个baseActivity,让所有活动继承他,然后在BaseActivity的onCrete里面log   getClass().getSimpleName();

_______________________________________________________________________

如何随时随地退出程序,避免多次按返回键

  用一个活动管理器类(ActivityCollector)。

  然后在baseActivity  oncrete里面添加  ActivityCollector.addActivity(this);

                                     ondestory里面添加..............................remove(this);

                                     让一个按钮 调用finishall方法就可以了



————————————————————————————————————————————

启动活动的最佳写法

比如SecondActivity不是你开发的

      在里面写一个actionStart方法

            public  static void  actionStart(Context context,String data1,String data2){

                       Intent intent=new Intent(context,SecondActivity.class);

                       intent.putExtra("param1"data1);

                       context.startActivity(intent);

}

}

之后只要调用SecondActivity.actionStart,传入上下文,数据等就可以启动SecondActivity了

0 0