安卓开发(二) Activity、View以及其他基础

学习安卓开发也有一段时间了,跟着《Android编程权威指南》一步一步敲下来,始终是一知半解,今天正好来整理一下,学的总有一天是要忘的,不然人类发明纸张干什么。

如果你对安卓开发知识为0,可以先移步这里:安卓Helloworld,接下来我们将直接开始。

本文的行文思路是,拆开看。权威指南是本好书,唯一的缺点是蹦的太快了,你还在一知半解的时候,下一步就开始了。我清楚作者的本意肯定是“你现在不懂没关系,后面的例程会讲。”但除非你除了看这本书以外啥都不干,否则前几章的知识在后文出现时,读者只会是一脸蒙逼——我前面还没懂。


那么现在,打开Android Studio,新建一个项目,一路下来,选择empty activity,其余默认,那么你接下来看到的第一个Activity将是这样的:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
    }
}

so,问题来了,什么是Activity?AppcompatActivity又是什么鬼?

Activity,直译为活动,也即前台活动,就是一个app的页面。你也可以称之为入口,一个app有且只有一个入口Activity,那么又在哪里定义呢?that lead us to AndroidManifest.xml.在这里,我们将定义:权限信息、入口Activity等等。官方文档给出的解释则是:

The manifest file provides essential information about your app to the Android system, which the system must have before it can run any of the app's code.

        
            
                

                
            
        

然后我们来到第二个问题AppcompatActivity,顾名思义,兼容Activity。如果你查看源代码一路追查上去,你会看到它继承自原生的Activity,但是如果extends 原生的Activity可能会导致兼容性问题,轻则异常,重则闪退。

那么我们来到了我们需要了解的第一个函数,onCreate()。Nice。其实一句话可以解释,onCreate()就是这个Activity被创建时调用的东西。既然有onCreate,就有onDestory,就有其他的balabala。那么另一个问题就出现了,生命周期。了解javaWeb的都知道这个词,往深了说可以玄乎其玄,就和“依赖注入”这种装B词汇一样——其实就是让A类实例化一个东西不安全不方便,让B类去实例化它,然后A类调用B.实例化()。

但装逼没用,我们简单了说,就是,Andriod系统开发人员设计好的东西,安卓系统打开一个app,里面很多组件(Activity只是其中之一),然后安卓系统就去自动调用一些方法,onCreate等函数,当你摁下home键,你划掉了它,你旋转了屏幕等等,安卓自动调用这些方法。这只是一种设计的方式,你也可以装这个逼。附一张生命周期的图。

安卓开发(二) Activity、View以及其他基础_第1张图片

上面的图慢慢看,生命周期大概可以这样子实现:

public class System{
	public static void main(){
            app a=new Myapp();//通过反射机制拿到Myapp是谁
	    if(someCondition()){
	    	a.onCreate();
	    }
    }
}
class app{
	protected onCreate(){
		balabala();
	}
}
class Myapp {
	@override
	protected onCreate(){
		myfuntions();
	}
	private myfuntions(){}
}

那么现在弄清楚了生命周期函数,也别纠结,不用记,括号里是谁?Bundle savedInstanceState。

Bundle是什么?别深究了,一个放东西的桶,放哪去了?那是Android系统的问题,等你是大佬了再说。我们需要知道的是,怎么放进去我们的东西——覆盖onSaveInstanceState(Bundle outState)。括号里又有个Bundle,也不用纠结,操作系统的事。

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("key",001);
    }

终于来到了我们的setContentView(R.layout.activity_main),那么,R类是什么?

它是自动生成的胶水类,在项目文件夹generatedJava下。它的左右是让你能简单的就引用到xml文件中的资源,而不是去写复杂的代码。慢慢展开generatedJava文件夹就能看到一大堆R类了。R.layout.activity_main也被生成在里面。

安卓开发(二) Activity、View以及其他基础_第2张图片

于是,我们通过 setContentView(R.layout.activity_main)获取到了activity_main.xml资源文件,并通过它来绘制用户界面。

接下来我们打开这个资源文件:



    

可以看到开头规定的第一句话就是layout的类型: android.support.constraint.ConstraintLayout

它直接关联到ConstraintLayout。而ConstraintLayout继承自ViewGroup。

 在Android APP中,所有的用户界面元素都是由View和ViewGroup的对象构成的。View是绘制在屏幕上的用户能与之交互的一个对象。

 至此,第一个简单应用的内容,被基本分解完毕。

你可能感兴趣的:(Android)