【Android】《第一行代码—Android》第一章总结

第一章:Android入门

  • Android系统架构图。
    ANDROID

  • Android四大组件

    • Activity
    • Service
    • Broadcast
    • Receiver
  • 《第一行代码:Android》中沿用的是传统的Eclipse+ADT的开发模式。笔者自行百度了解到,谷歌自2013年推出Android的专属开发工具Android Studio,这套开发环境起初并不是很稳定,加上很多Android还是习惯使用Eclipse+ADT的传统开发方式,所以这本书并没有选用。

  • 另外笔者课余时间逛知乎,发现很喜欢的一家公司——小米——内部自2014年开始,也把开发工具换到Android Studio,所以建议新入门的同学使用Android Studio作为开发工具,相对于Eclipse来说 ,Android Studio有诸多的好处,至于好在哪里,可以百度出来一大堆。
    小米

  • 开发工具:

    • JDK1.8(接触过Java的电脑上都应该已经安装)
    • Android SDK——谷歌为开发者封装好的各种类库、API
    • ADT(Android Developer Tools)

作为一个Android菜鸟,相信接触的第一个Android程序就是HelloWorld吧!我也不例外。直接根据树上的介绍,ADT会自动帮你创建一个HelloWorld的Android程序,打开上面安装的安卓虚拟机AVD(Android Vitural Device),右键Android项目目录,运行程序,你就会在AVD上看到效果,有木有很激动?

第二章:探究Activity

  1. 手动创建Android项目
    1. src目录下,建包,包下创建MainActivity的Java类,让该类继承Activity.
    2. 在MainActivity类中重写onCreate()方法
    3. 创建布局文件layout.xml 布局文件中可以添加Button、TextView等标签
    4. 在MainActivity类中的onCreate()方法体中加载layout.xml布局文件。加载布局文件需用setConntentView()方法,将layout.xml作为参数传入setContentView()方法中
    5. 在AndroidManifest.xml文件中注册MainActivity.注册标签<activity></activity>应该在<application></application>内部

  2. 来看看Eclipse下和Android下,Android项目目录
    Eclipse
    Android Studio
    对比发现这两张目录结构,第二张的结构明显优于第一张。这里附上一篇很好的Android Document。作者是GitHub大神,膜拜吧!https://github.com/futurice/android-best-practices

Android是使用Task来管理Activity的。一个Task就是一组存放在栈里的Activity集合,这个栈就被称为返回栈(Back Task)。其实这个过程可以理解为,当我们用浏览器打开网页时,按返回键,就会回到上一个未关闭的网页。
Android返回栈

Activity在onCreate()和onDestory()之间所经历的是完整生存期,在onStart()和onStop()之间所经历的是可见生存期,在onResume()onPause()之间所经历的是前台生存期。见下图
ActivityLife

涉及到Activity的七个方法,其实接触后你会发现,这些方法的用法与Java里面的基本用法并无二致,在创建事件时传入一个匿名内部类、方法重写等。

  • onCreate()
  • onStart()
  • onResume()
  • onPause()
  • onStop()
  • onDestroy()
  • onRestart()

一个Activity在其生命周期中有四种状态

  • 运行状态:当一个Activity位于栈顶时,这是Activity就处于运行状态
  • 暂停状态:当一个Activity不在处于栈顶位置,但仍然可见时,这是Activity就进入了暂停状态
  • 停止状态:当一个Activity不再处于栈顶位置,并且完全不可见时,这是Activity就进入了停止状态
  • 销毁状态:当一个Activity从返回栈中移除后就变成了销毁状态

下面用代码实现,在LogCat打印日志,以便观察Activity的运行过程。创建一个Android Project,在src目录下建包,在包下分别创建MainActivity、NormalActivity、DialogActivity三个Activity.代码如下

MainActivity

package com.example.activitylifecycletest;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;

public class MainActivity extends Activity {

    public static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate");
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        Button startNormalActivity = (Button) findViewById(R.id.start_normal_activity);
        Button startDialogActivity = (Button) findViewById(R.id.start_dialog_activity);

        startNormalActivity.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, NormalActivity.class );
                startActivity(intent);
            }
        });

        startDialogActivity.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, DialogActivity.class );
                startActivity(intent);
            }
        });

    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "onStart");
    }


    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG, "onResume");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG, "onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(TAG, "onRestart");
    }

}

NormalActivity

package com.example.activitylifecycletest;

import com.example.activitylifecycletest.R;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;

@SuppressLint("SuspiciousImport")
public class NormalActivity extends Activity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.normal_layout);
    }

}

DialogActivity

package com.example.activitylifecycletest;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;

public class DialogActivity extends Activity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.dialog_layout);
    }
}

紧接着定义这三个Activity的布局xml文件,代码如下

dialog_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="This Is A Dialog Activity"
        />

</LinearLayout>

normal_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="This Is A Normal Activity"
        />

</LinearLayout>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button 
        android:id="@+id/start_normal_activity"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Start NormalActivity"
        />

    <Button 
        android:id="@+id/start_dialog_activity"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Start DialogActivity"
        />

</LinearLayout>

最后,把这三个Activity在AndroidManifest.xml文件中注册,代码如下

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.activitylifecycletest"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="21"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <activity android:name=".MainActivity">
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".NormalActivity">
        </activity>

        <activity android:name=".DialogActivity" android:theme="@android:style/Theme.Dialog">
        </activity>

    </application>
</manifest>

运行程序,LogCat中就会打印出日志,可以看到点击按钮后,上述七个方法的运行情况。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值