Android开发 期末复习

Android开发

  • RelativeLayout布局时居中显示 android:layout_centerInParent=“true”

  • 控件的高度和宽度单位:dp , 像素 : px, 缩放无关像素 :sp

  • 设置居中:android:gravity=“center”

  • match_parent表示让当前控件的大小和父布局的大小一样,也就是由父布局来决定当前控件的大小

    wrap_content表示让当前的控件大小能够刚好包含里面的内容,也就是由控件内容决定当前控件的大小

    一般宽度设为match_parent,高度设为 wrap_content

  • strings.xml 里面的字符串资源被Activity调用时,是作为int类型的。 想要获取字符串,需使用 getString(int)方法。

  • 字符串数组

<string-array name="planets_array">
        <item>Mercury</item>
        <item>Venus</item>
        <item>Earth</item>
        <item>Mars</item>
</string-array>
//在Activity中调用
Resources res = getResources();
String[] planets = res.getStringArray(R.array.planets_array);
  • intent对象是component(组件)用来与操作系统通信的一种媒介工具。

image-20210926165516166

  • UI布局(种类、布局属性、ID的赋值与获取):1.LinearLayout线性布局(线性布局在实际开发中很常用,它主要以水平和垂直的方式显示界面中的控件。线性布局中有一个非常重要的属性orientation用于控制控件排列的方向,vertical表示垂直显示,horizonal表示水平显示。)2.RelativeLayout相对布局(是通过相对定位的方式指定控件位置,在设计的时候遵循控件之间的依赖关系,后放入的控件的位置依赖于先放入的控件的位置。)3.FrameLayout帧布局(为每个加入其中的控件创建一个白区域,帧布局大小有内部最大控件决定)4.AbsoluteLayout绝对布局(通过指定X,Y坐标的控制每个控件的位置)5.TableLayout表格布局(通过行和列将界面划分为多个单元,每个单元可以添加控件)推荐RelativeLayout、LinearLayout、GridLayout。android:padding内边距layout_margin边距onClick单击事件绑监听器~visibility 是否可见alpha透明度(01) ~background=“@drawable/图片名称” 或 “#ffffff”(设置背景颜色)

  • MVC优点:控制层和View层都在activity中进行操作使数据操作方便;按层考虑设计便于复用类;便于UI界面部分显示和业务逻辑;数据处理分开 缺点activity中的代码过多

  • Android编译过程,用到了哪些组件(常用命令、资源文件、打包、字节码)

    答:aapt命令, 生成R文件;javac命令,生成class文件;dx 命令,把class文件转换为.dex文件;aapt命令,打包资源;apkbuilder命令,生成apk;创建密钥;签名 ->启动设备(模拟器/真机)-> 上传apk -> 安装apk -> 启动主Activity

  • 四大组件(英文、类名):活动(activity)表现功能、服务(Service)后台运行服务不提供界面、内容(Content Provider)支持在多应用中存储和读取数据、广播接收器(Broadcast Receive)接收广播

  • 分析View与ViewGroup关系:ViewGroup继承自View,是一种特殊的View,它可以装其他的Views(或其他的ViewGroup)。ViewGroup是布局(layouts)和views containers的父类。View是所有UI组件的基类,而ViewGroup是容纳View及其派生类的容器,ViewGroup也是从View派生出来的。layout是不可见的容器,它用来装其他的 Views (or 其他的ViewGroups)

  • Activity的四种启动方式:1.standard模式(每启动一个Activity就在栈顶创建一个新的实例)2.singleTop模式(判断要启动的Activity实例是否存在于栈顶,如果位于栈顶就直接复用,否则创建新的实例)3.singleTask模式(每次启动Activity时,系统首先检查栈中是否存在当前的Activity实例,如果存在就直接使用,并且把当前的Activity之上的所有Activity出栈,否则重新创建一个新的实例。)4.singleInstance模式(回启东一个新的Activity来管理Activity实例)

  • AndroidSDK与JavaJDK的关系:1.Android SDK基本包含rt.jar基础类库但是并不全部包括,剔除了rt.jar的部分基础类 2.Android SDK不包括虚拟机但JDK包括虚拟机,Android的Darvit虚拟机安装在Android设备上 3.Android SDK和JDK编译工具都是将java文件编译成各自虚拟机能够识别的编码

  • Task与BackStack任务是一个activity栈。栈底基activity,栈顶活动用户能看到。一个任务(task)就是一个在执行某项工作时与用户进行交互的Activity的集合。这些Activity按照被打开的顺序依次被安排在一个堆栈中(回退堆栈)

  • DVM与JVM区别:异:Dalvik 基于寄存器,而 JVM 基于栈。相对于JVM来说,Dalvik占用CPU和内存少。JVM运行的Java字节码,它从.class文件或Jar包中加载字节码然后执行;Dalvik 运行的是 dex 文件(Dalvik Executable),生成APK时,Dx工具把所有.class文件编译成一个 dex 文件。Dalvik 和 Java SDK的SDK不同。java vm每个类都有一个常量池,DVM只有一个常量池。Dalvik可以允许多个instance 运行。同:都解释执行;每个 OS 进程运行一个 VM,并运行一个单独的程序;实现的 JIT compiler(即时编译)。JIT(Just In Time,即时编译技术)对于热代码(使用频率高的字节码)直接转换成汇编代码

  • service基本概念:service用于在后台完成用户指定的操作。service分为两种:(a)started(启动):当应用程序组件(如activity)调用startService()方法启动服务时,服务处于started状态。(b)bound(绑定):当应用程序组件调用bindService()方法绑定到服务时,服务处于bound状态。

  • Android的虚拟机和系统架构:使用Dalvik虚拟机作为Android平台的运行环境,所有的Dalvik字节码由Java字节码转换而来,并被打包到一个DEX(Dalvik Executable)可执行文件中,Dalvik虚拟机通过解释DEX文件来执行这些字节码。

  • 显式Intent与隐式Intent的区别:显式的 Intent ,即在构造 Intent 对象时就指定接收者,另一种是隐式的 Intent ,即Intent 的发送者在构造 Intent 对象时,并不知道也不关心接收者是谁,有利于降低发送者和接收者之间的耦合。通过指定Context与Class对象,然后调用intent的构造方法来创建Intent,则创建的是显式intent。在同一应用中,使用显式Intent来启动activity。一个应用的activity去启动另一个应用的activity,使用隐式intent。

  • 异步任务需要重载什么函数,其框架和基本概念:AsyncTask概念:可以实现UI线程和后台线程进行通讯,后台线程执行异步任务,并把结果返回给UI线程。新建内部类继承AsyncTask轻量级异步类,重写 doInBackground(),onProgressUpdate()(可选), onPreExecute()(可选),onPostExecute(),onCancelled()(可选),在需要启动的地方调用execute(Params… params)方法开始

  • 在Activity加载Fragment的基本流程:静态和动态 静态:View view=inflater.inflate(R.layout.fragment_title,container);return view ; 动态:需要activity绑定容器xml,然后用fragment事务,在fragment队列里面按照id找fragment并检查它是否已经存在,存在就调用,没有就建一个,添加实例信息,提交,应用。然后在自定义的继承了Fragment的类中重写onCreateView方法,用inflater来inflate一个view绑定xml其他的方法,属性可以在fragment里面定义。

  • 使用Fragment设计UI有哪些好处? 1.Fragment可以使你能够将activity分离成多个可重用的组件,每个都有它自己的生命周期和UI。2.Fragment可以轻松得创建动态灵活的UI设计,可以适应于不同的屏幕尺寸。从手机到平板电脑。3.Fragment是一个独立的模块,紧紧地与activity绑定在一起。可以运行中动态地移除、加入、交换等。4.Fragment提供一个新的方式让你在不同的安卓设备上统一你的UI。5.Fragment 切换流畅,轻量切换。6.Fragment 替代TabActivity做导航,性能更好。7.Fragment 在4.2.版本中新增嵌套fragment使用方法,能够生成更好的界面效果。Fragment做局部内容更新更方便,原来为了到达这一点要把多个布局放到一个activity里面,现在可以用多Fragment来代替,只有在需要的时候才加载Fragment,提高性能。可以从startActivityForResult中接收到返回结果,但是View不能。

  • SQLite基本概念:SQLite 是一个开源的嵌入式关系型数据库,是一个自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 具有如下特点:无需单独的服务器进程,是无服务器的需要配置,无需复杂的安装或管理步骤,数据库存储在一个单一的跨平台的磁盘文件中,非常小的,轻量级的,自给自足的,不需要任何外部的依赖,事务是完全兼容 ACID,允许从多个进程或线程安全访问,支持 SQL92(SQL2)标准的大多数查询语言的功能,使用 ANSI-C 编写的,并提供了简单易用 API,兼容类 UNIX 平台(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)平台。

  • 新建Activity步骤 1. 新建类继承Activity或者其子类 2. 在Android QManifest中声明 3. 创建layout并在Activity的onCreate中声明

  • Actvity与Fragment关系:Fragment(碎片)是必须嵌入在 Activity(活动) 中使用的。Fragment的生命周期随着Activity的生命周期的变化而变化

  • 线程基本概念:线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。

  • ADB驱动的工作原理: 由androidadb.c和f_adb.c实现 假如用户启动adb client,在adb client执行安装APP的adb命令,后台会自动启动adb server来接收adb client发来的请求,然后启动adbd来接收adb server发来的请求并执行操作。adb client(本质adb shell):每打开一个adb shell的命令行窗口,就存在一个adb client客户端进程。adb server:PC端和手机端交互的唯一接口。adbd(adb demo):每台安卓设备只能有一个adbd服务进程。

  • 使用RecycleView来显示列表。使用fragment argument将列表和明细联系起来。使用ViewPager来切换不同列表项的明细界面。

生命周期

  • onResume : 当Activity处于当前任务活动栈的最上边时
  • onPause(暂停状态) : 当Activity失去焦点但仍对用户可见
  • onStop(停止状态):完全被另一个Activity遮挡时处于停止状态

image-20210926155045653

  • 所有的日志记录方法都有两种参数签名: string类型的tag参数和msg参数

image-20210926162012470

  • Activity之间的参数传递
// FirstActivity在onCreate中
Intent intent = new Intent(MainActivity.this, CheatActivity.class);
// 第一种:Bundle bundle = new Bundle();   bundle.putInt("true_num",num); intent.putExtras(bundle);
intent.putExtra(EXTRA_ANSWER_IS_TRU,888)  //类似于(key,value)
// 第一种:startActivity(intent);
startActivityForResult(intent, REQUEST_CODE_CHEAT);//希望得到传回的数据
//SecondActivity设置传送的数据
Intent intent = new Intent(Activity1.this, RootActivity.class);
intent.putExtra("pass_data", data);
//返回数据到启动它的Activity中
setResult(RESULT_OK, intent); //RESULT_CANCELED
finish();  
//FirstActivity获取回传数据
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode != Activity.RESULT_OK) {
            return;
        }
 }
  • Fragment之间的参数传递
//FirstFragment传递数据
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Bundle result = new Bundle();
        result.putString("bundleKey", "result");
        getParentFragmentManager().setFragmentResult("requestKey", result);
    }
});
//SecondFragment传递数据
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getParentFragmentManager().setFragmentResultListener("requestKey", this, new FragmentResultListener() {
        @Override
        public void onFragmentResult(@NonNull String key, @NonNull Bundle bundle) {
            String result = bundle.getString("bundleKey");
        }
    });
}
  • 解决屏幕旋转后返回到第一题的问题
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
    super.onSaveInstanceState(outState);
    // 存放状态
    outState.putInt(KEY_INDEX,mCurrentIndex);
    outState.putBoolean(KEY_CHECK,mIsCheater);
}
//在onCreate中获取
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (savedInstanceState !=null) {
        mCurrentIndex = savedInstanceState.getInt(KEY_INDEX, 0);
        mIsCheater = savedInstanceState.getBoolean(KEY_CHECK, false);
}}
AndroidManifest的作用
  • 为应用的 Java 软件包命名。软件包名称充当应用的唯一标识符。
  • 描述应用的各个组件,包括构成应用的 Activity、服务、广播接收器和内容提供程序。它还为实现每个组件的类命名并发布其功能,例如它们可以处理的 Intent 消息。这些声明向 Android 系统告知有关组件以及可以启动这些组件的条件的信息。
  • 确定托管应用组件的进程。
  • 声明应用必须具备哪些权限才能访问 API 中受保护的部分并与其他应用交互。还声明其他应用与该应用组件交互所需具备的权限
  • 列出 Instrumentation类,这些类可在应用运行时提供分析和其他信息。这些声明只会在应用处于开发阶段时出现在清单中,在应用发布之前将移除。
  • 声明应用所需的最低 Android API 级别
  • 列出应用必须链接到的库
  • 5
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值