美文网首页Android开发
《第一行代码》阅读笔记1

《第一行代码》阅读笔记1

作者: aasdfghjkll | 来源:发表于2018-11-15 16:07 被阅读4次

    说明:因为之前学习过一些Android开发相关的内容,所以这个阅读笔记主要是对编者自己知识的梳理,主要侧重于不太擅长的地方,欢迎大家进来参观O(∩_∩)O

    1.初识Android

    1.1 Android系统架构

    四层架构,五块区域
    1.Linux内核层 -提供底层驱动
    2.系统运行库层
    特性支持: C/C++库,如SQLite库提供了数据库的支持,OpenGL|ES库提供了3D绘图的支持,Webkit库提供浏览器内核支持(webkit主要是Safari和Chrome的浏览器渲染引擎)
    运行时库: Java核心库、Dalvik虚拟机(作用是使app运行在核心进程中,它对手机性能、CPU性能有限等情况做了处理)
    3.应用框架层 -各种API
    4.应用层 -app

    1.2 Activity

    (1)Activity的跳转

    使用Intent跳转有显式和隐式两种方式,其中隐式跳转方式如下:
    (隐式保存方式相当于通过匹配Action和Category来跳转Activity)
    1.在AndroidManifest.xml清单文件中注册被跳转Activity的action和category:

    AndroidManifest.xml文件中设置activity的action和category
    注意:intent-filter中必须加上默认的catagory,也就是下面的语句,不然会报错
    <category android:name="android.intent.category.DEFAULT"/>
    

    2.在MainActivity中写跳转语句:


    Intent的隐式跳转

    其它隐式跳转:

    • 跳转到网页
      action写为:


      跳转网页的Action

      Activity中写为:


      跳转网页的隐式Intent写法
      其中Intent实例的参数要跟AndroidManifest.xml中的一致
      最后的效果:
      打开网页的效果

      最后的效果显示了可以打开网页的所有程序

    清单文件中data标签可以配置的内容有:
    android:scheme---数据协议(如http)
    android:host---主机名(如www.baidu.com
    android:port---端口
    android:path---域名之后的路径
    android:mimeType---例如(text/html)

    1. 当前页面返回到上一个页面时的传值
      创建一个只用于传值的Intent,并用setIntent(RESULT_OK,intent)

    通常,从当前页返回上一页用button来实现,如果用手机上的返回键返回上一页时,可以通过onBackPressed()方法来解决这个问题:

    @override
    public void onBackPressed(){
      Intent intent=new Intent();
      intent.putExtra("data_return","data_content");
      setResult(RESULT_OK,intent);
      finish();
    }
    

    (2)活动的生命周期

    活动的生存期
    onCreate()---活动的初始化操作,如加载布局、绑定事件等。
    onStart()---活动由不可见变为可见时
    onResume()---活动由不可见变为可见或部分可见变为可见时
    onPause()---用于启动或恢复另一个活动时,可以在这里释放CPU资源,保存数据(但是方法要快,不能影响新的栈顶活动的使用),或者部分可见时
    onStop()---完全不可见时
    onRestart()---活动重新被启动时

    • 当把一个Activity变为Dialog时,需要在AndroidManifest.xml文件中添加一个属性:
    android:theme="@android:style/Theme.Dialog"
    
    • 活动被回收之前,调用onSavaInstanceState()可以携带Bundle类型的参数用于保存数据。

    (3)活动的启动模式

    standard(默认)、singleTop、singleTask、singleInstance
    可以通过在AndroidManifest.xml中给activity添加android:launchMode属性来选择启动模式
    standard:启动相同的Activity时,不管返回栈中有没有该活动,都会入栈,每次都会创建新实例
    singleTop:启动活动时如果发现返回栈的栈顶是该活动时,可以直接使用它(不是栈顶时会再创建一个)
    singleTask:让某个活动在应用程序的整个上下文中只存在一个实例,如果返回栈中有该实例,该实例上的活动会统统出栈,直接使用该实例
    调用之前的活动时会调用OnRestart()方法,当该实例完全显示出来后,原来的Activity会调用onDestroy()方法
    singleInstance:单独的返回栈管理该活动,其它应用程序就可以到这里来访问它,解决了共享活动实例的问题,通过getTaskId()可以获取到当前活动所在的返回栈的Id,可以查看哪些活动在同一个栈中,哪个在单独的栈中,来验证singleInstance模式;
    当按下back键时,会显示同栈内的栈顶活动,其次显示其它栈的栈顶元素,也是同理~
    根据书上的例子来理解,更好理解哦~

    (4)活动的最佳实践

    实践1:

    快速判断当前页面是哪个活动:
    方法:

    • 创建一个继承Activity的BaseActivity类
    • 在BaseActivity中重写onCreate()方法,并在其中加入如下语句:


      指明当前页面所在的activity的语句
    • 其它Activity原先继承Activity,全部改为继承BaseActivity
      这样,当运行页面时,Logcat页面就会有如下字样:


      logcat相应日志

    实践二:

    随时退出程序
    一个神奇的可以完成随时退出功能的类:

    package com.example.test.foralltest;
    
    import android.app.Activity;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 可以随时随地退出程序
     */
    public class ActivityCollector {
    
        public static List<Activity> activityList = new ArrayList<>();
    
        /**
         * addActivity
         * @param activity
         */
        public static void addActivity(Activity activity) {
            activityList.add(activity);
        }
    
        public static void removeActivity(Activity activity) {
            activityList.remove(activity);
        }
    
        public static void finishAll() {
            for (Activity activity : activityList) {
                if (!activity.isFinishing()) {
                    activity.finish();
                }
            }
        }
    }
    
    

    然后按如下方法调用

    调用万能的随时退出类
    如果想在哪里直接退出应用,可以直接调用Activity Collector.finishAll()方法

    实践三:

    方便调用下一个Activity(适用于不是只有自己开发的情况)
    在被调Activity中写一个:

    让调用者可以知道传参数量的情况,更方便调用

    庆祝第一篇文章完结,撒花★,°:.☆( ̄▽ ̄)/$:.°★

    相关文章

      网友评论

        本文标题:《第一行代码》阅读笔记1

        本文链接:https://www.haomeiwen.com/subject/plpyfqtx.html