美文网首页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