【未完成】Android第一行代码总结

来源:互联网 发布:软件技术支持岗位职责 编辑:程序博客网 时间:2024/05/28 05:15

Android 可分为四层架构,五块区域

1. Linux内核层

    Linux2.6内核,提供了底层驱动

2. 系统运行库

    C/C++库提供了主要的特性支持,如SQLite、OpenGL/ES、Webkit

   Android运行时库,包括了Dalvik虚拟机

3. 应用框架层

    提供构建应用程序时可能用到的各种API

4. 应用层

    所有安装在手机上的应用程序都属于这一层


Android系统组件分别是活动Activity、服务Service、广播接收器BroadcastReceiver和内容提供器Content Provider。


assets主要存放一些随程序打包的文件,在程序运行时可以动态提取到这些文件的内容,所有网页相关的文件也都存放在这个目录下。


project.properties 指定了编译程序时所使用的SDK版本


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


menu文件夹用来存放菜单文件。


应用程序中没有声明任何一个Activity为主Activity,仍然可以正常安装,但是无法在启动器中看到或者打开这个Activity,一般作为第三方服务供其他的应用在内部调用。


request Window Feature()一定要在setContentView()前执行。


intent一般用来启动Activity,Broadcast和Service。


startActivity专门用来启动Activity,可以接受Intent参数


AndroidManifest.xml中,<action>标签指定了当前活动可以响应的action,而<category>标签则包含了一些附加信息,更精确得指明了当前Activity能够响应的Intent中可能带有的category。只有<action>和<category>中的内容能够匹配上Intent中指定的action和category时,这个Activity才能响应该Intent。每个Intent中只能指定一个action,但能够指定多个category,用Intent.addCategory()方法。


使用隐式Intent可以启动其他程序的Activity。


startActivityForResult()也可以用于启动Activity,但这个方法期望在Activity销毁时能够返回一个结果给上一个Activity。

startActivityForResult()接收两个参数,一个是Intent,第二个是请求码,请求码只要是一个唯一的值就可以了。在第二个Activity finish()前,用setResult()返回结果,这个方法有两个参数,第一个参数用于向上一个Activity返回处理结果,一般只使用RESULT_OK或者RESULT_CANCELED这两个值,第二个参数是带有数据的Intent。

此时调用第一个Activity的onActivityResult()方法,有3个参数requestCode, resultCode与Intent,用这个方法得到返回数据。

<span style="white-space:pre"></span>protected void onActivityResult(int requestCode, int resultCode, Intent data){<span style="white-space:pre"></span>    switch(requestCode)<span style="white-space:pre"></span>    {<span style="white-space:pre"></span>    case 1://1是设置的requestCode,在startActivityForResult()中<span style="white-space:pre"></span>              if(resultCode == RESULT_OK){<span style="white-space:pre"></span>              //相关处理<span style="white-space:pre"></span>            <span style="white-space:pre"></span>  <span style="white-space:pre"></span>              }<span style="white-space:pre"></span>              break;<span style="white-space:pre"></span>      default:<span style="white-space:pre"></span>              break;<span style="white-space:pre"></span>    }<span style="white-space:pre"></span>}


Android是使用任务Task来管理Activity的,一个任务就是一组放在栈里的Activity的集合。


每个Activity在其生命周期中最多会有4种状态。

1)运行状态:该Activity位于Task的顶部时。

2)暂停状态:不处于栈顶但是可见。

3)停止状态:不处于栈顶,且完全不可见,但是会为该Activity保存相应的状态和成员变量。

4)销毁状态:从Task中移除。


Activity中定义了7个回调方法,覆盖了Activity生命周期的每一个环节,onCreat()、onStart(), onResume(), onPause(), onStop(), onDestroy(), onRestart()

完整生命期:onCreat()与onDestroy()之间经历

可见生命期:onStart()与onStop()之间经历

前台生命期:onResume()与onPause()之间经历,Activity处于运行状态


Android提供了onSaveInstanceState()解决Activity呗系统回收时数据的保存,该方法携带一个Bundle类型的参数,在OnCreate()方法中,通过savedInstanceState来读取数据。

Activity的启动模式有standard, singleTop, singleTask和sigleInstace.

standard是默认启动模式,不在乎该Activity是否在Task中已经存在。

singleTop:当Activity在Task栈顶时,直接使用,不再创建,其余情况下均创建。

singleTask:整个应用程序的上下文中只有一个实例

singleInstance:有一个单独的Task来管理整个Activity,注意返回时是返回对应Task的下一个。


随时退出Activity,可以建立BaseActivity,有ActivityCollector类,提供add,remove以及finish()方法,在BaseActivity中实现add与remove方法。

public class ActivityConllector{    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 : activities){            if(!activity.isFinishing()){                activity.finish();             }        }    }}public class BaseActivity extends Activity{    protected void onCreat(Bundle savedIntanceState){       super.onCreat(savedInstanceState);       ActivityCollector.addActivity(this);    }    protected void onDestroy(){        super.onDestroy();        ActivityCollector.removeActivity(this);    }}
启动Activity的最佳写法,在要启动的Activity中写public static void startAction()方法,参数中传入context与需要的其他参数,在该方法中对参数再用Intent封装。因此,第一个Activity只需要调用第二个Activity的这个方法就可以了。


Android的UI

fill_parent与match_parent意义相同,但是官方推荐使用match_parent

android:gravity可以用“|”来同时指定多个值

android:maxLine指定最大行数

可以通过android:max给进度条指定一个最大值,然后可以在代码中动态改变进度条值

int progress = progressBar.getProgress();progress += 10;progressBar.setProgress(progress);
android:gravity用于指定文字在控件中的对齐方式。android:layout_gravity用于指定控件在布局中对齐方式

在LinearLayout中,若指定了android:layout_weight属性,则layout_width或者layout_height没有意义,建议设定为0dp

inputTpyt:"textPassword"来指定输入类型为密码





0 0
原创粉丝点击