Android项目开发杂记

Android项目开发杂记

0. 和安全相关

项目根目录里的proguard-rules.pro这个文件用于指定项目代码的混淆规则,在代码开发完成后打成安装包文件后使反编译代码难以阅读。

1. 代码相关

  • 基本上所有活动都需要继承的AppCompatActivity类,是一种向下兼容的Activity,可以将Activity在各个系统版本中增加的特性和功能最低兼容到Android 2.1系统。

  • Activity是Android系统提供的一个活动基类,我们项目中所有的活动都必须继承它或者它的子类才能拥有活动的特性(AppCompatActivity是Activity的子类)。

  • onCreate()是一个活动被创建时必定要执行的方法

  • 活动引入布局文件的代码如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    protected void onCreate(Bundle savedInstanceState) {
    // 继承基类(Activity),重写基类onCreate方法,传入的是当前Activity的状态
    super.onCreate(savedInstanceState);
    // 绑定该活动的布局文件
    setContentView(R.layout.activity_main);

    //...

    }
  • res目录结构

    • drawable — 存放图片
      • drawable-hdpi、drawable-xhdpi、drawable-xxhdpi, etc.
  • mipmap — 存放应用图标

    • values — 存放字符串、样式、颜色等配置
      • 在活动里通过R.string.XXX来调用
      • 在布局文件XML里通过@string/XXX来调用
      • 上述的string可替换为 drawable, mipmap, layout等
    • layout — 存放布局文件
  • AndroidManifest.xml文件中,所有的活动声明放在<application>里,在<activity>中。

    1
    2
    3
    4
    5
    6
    7
    ...
    <application
    ...
    />
    ...
    <activity android:name=".XXX"/>
    </application>

    可以使用android:label指明活动中标题栏的内容(显示在最顶部),给主活动指定的label不仅会成为标题栏中的内容,还会成为启动器(Launcher)中应用程序显示的名称。

  • intent

    • 显式intent:直接在活动中写明,从一个活动“跳转”到另一个活动

      1
           Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
    • 隐式intent:不明确指明要启动的活动,而是指明(例如在AndroidManifest.xml中)一系列更为抽象的action和category等信息。交由系统分析这个intent,找到最适合的活动去启动。

      最适合也就是指,在当前的情况下,可以响应这个隐式intent的活动。

      1
      2
      3
      4
      5
      6
      <activity android:name=".SecondActivity" >
      <intent-filter>
      <action android:name="com.example.activitytest.ACTION_START" />
      <category android:name="android.intent.category.DEFAULT" />
      </intent-filter>
      </activity>
      1
      2
      3
      4
      5
      6
      7
      // 直接把action的字符串内容传入,表示这个隐式intent想要启动能够 响应/符合 这个action的活动
      Intent intent = new Intent("com.example.activitytest.ACTION_START");

      // 添加一个category,表示这个隐式intent想要启动能够 响应/符合 这个category的活动
      Intent intent = new Intent("com.example.activitytest.ACTION_START");
      intent.addCategory("com.example.activitytest.MY_CATEGORY");
      startActivity(intent);

      隐式intent的另一个重要作用是:可以启动其他程序的活动,使得多个应用程序内的功能共享成为了可能。e.g.带哦用

  • 使用ListView的简单思路:

    • 创建活动

    • 编写布局,为ListView指定一个ID

    • 数组数据无法直接传给ListView,需要借助适配器Adapter来完成(推荐ArrayAdapter)

    • 指定ArrayAdapter的泛型,在ArrayAdapter函数里依次传入:当前上下文、ListView子项布局的ID,要适配的数据

      1
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(                     MainActivity.this, android.R.layout.simple_list_item_1, data);
    • 调用ListView的setAdapter方法,传递构建好的适配器对象,建立起ListView和数据的关联

2. 架构相关

  • Android程序的设计讲究逻辑和视图分离。通用的方法是在布局文件(layout)中编写界面,在活动(Activity)中引入。