安卓基础到入门学习(复习笔记)

一、Android 基本常识

1、写 10 个简单的 linux 命令

mkdir 创建文件夹 rmdir 删除文件夹 rm 删除文件 mv 移动文件 cp 拷贝文件 cat 查看文件 tail 查看文件尾部 more 分页查看文件 cd 切换当前目录 ls 列出文件清单 reboot 重启 date 显示日期 cal 显示日历

ps 查看系统进程相当于 windows 的任务管理器 ifconfig 配置网络

2、书写出 android 工程的目录结构

android. jar 依赖的 android sdk assets 资源文件 bin 生成的字节码 apk 在此 libs 依赖 jar 和 so res 资源文件

drawable drawable-hdpi layout

menu values

AndroidManifest.xml

project.properties

3、什么是 ANR 如何避免它?

在 Android 上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择让程序继续运行,但是,他们在使用你的应用程序时,并不希望每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样,系统不会显示

ANR 给用户。

不同的组件发生 ANR 的时间不一样,主线程(Activity、Service)是 5 秒,BroadCastReceiver 是 10 秒。解决方案:将所有耗时操作,比如访问网络,Socket 通信,查询大量 SQL 语句,复杂逻辑计算等都放在子线程中去,然后通过 handler.sendMessage、runonUITread、AsyncTask 等方式更新 UI。无论如何都要确保用户界面操作的流畅度。如果耗时操作需要让用户等待,那么可以在界面上显示进度条。

4、谈谈 Android 的优点和不足之处

优点:

1、开放性,开源,免费,可定制

2、挣脱运营商束缚

3、丰富的硬件选择

4、不受任何限制的开发商

5、无缝结合的 Google 应用缺点:

1、安全问题、隐私问题

2、同质化严重

3、运营商对 Android 手机仍然有影响

4、山寨化严重

5、过分依赖开发商,缺乏标准配置

5、一条最长的短信息约占多少 byte?

在国内的三大运营商通常情况下中文 70(包括标点),英文 160 个。对于国外的其他运行商具体多长需要看运营商类型了。

android 内部是通过如下代码进行判断具体一个短信多少 byte 的。

ArrayList android.telephony.SmsManager.divideMessage(String text)

7、如何判断是否有 SD 卡?

通过如下方法:

Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)

如果返回 true 就是有 sdcard,如果返回 false 则没有。

8、dvm 的进程和 Linux 的进程, 应用程序的进程是否为同一个概念?

dvm 指 dalvik 的虚拟机。每一个 Android 应用程序都拥有一个独立的 Dalvik 虚拟机实例,应用程序都在它自己的进程中运行。而每一个 dvm 都是在 Linux 中的一个进程,所以说可以近似认为是同一个概念。

什么是 android DVM:Dalvik 是 Google 公司自己设计用于 Android 平台的 Java 虚拟机,每一个 Dalvik 应用作为一个独立的 Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。

Dalvik 和 Java 虚拟机的区别

  • Dalvik 主要是完成对象生命周期管理,堆栈管理,线程管理,安全和异常管理,以及垃圾回收等等重要功能。
  • Dalvik 负责进程隔离和线程管理,每一个 Android 应用在底层都会对应一个独立的 Dalvik 虚拟机实例,其代码在虚拟机的解释下得以执行。
  • 不同于 Java 虚拟机运行 java 字节码,Dalvik 虚拟机运行的是其专有的文件格式 Dex
  • dex 文件格式可以减少整体文件尺寸,提高 I/O 操作的类查找速度。
  • odex 是为了在运行过程中进一步提高性能,对 dex 文件的进一步优化。
  • 所有的 Android 应用的线程都对应一个 Linux 线程,虚拟机因而可以更多的依赖操作系统的线程调度和管理

机制

  • 有一个特殊的虚拟机进程 Zygote,他是虚拟机实例的孵化器。它在系统启动的时候就会产生,它会完成虚拟机的初始化,库的加载,预制类库和初始化的操作。如果系统需要一个新的虚拟机实例,它会迅速复制自身,以最快的数据提供给系统。对于一些只读的系统库,所有虚拟机实例都和 Zygote 共享一块内存区域。

9.Android 程序与 Java 程序的区别?

  • Android 程序用 android sdk 开发,java 程序用 javasdk 开发.
  • Android SDK 引用了大部分的 Java SDK,少数部分被 Android SDK 抛弃,比如说界面部分,java.awt swing package 除了 java.awt.font 被引用外,其他都被抛弃,在 Android 平台开发中不能使用。android sdk 添加工具 jar httpclient , pull opengl

10、启动应用后,改变系统语言,应用的语言会改变么?

这个一般是不会的,一般需要重启应用才能改变应用语言。但是对应应用来说如果做了国际化处理则支持如果没

有处理那系统语言再更改也是无用的。

11、请介绍下 adb、ddms、aapt 的作用

adb 是 Android Debug Bridge ,Android 调试桥的意思,ddms 是 Dalvik Debug Monitor Service,dalvik 调

试监视服务。aapt 即 Android Asset Packaging Tool,在 SDK 的 build-tools 目录下。该工具可以查看,创建, 更新 ZIP 格式的文档附件(zip, jar, apk)。也可将资源文件编译成二进制文件,尽管我们没有直接使用过该工具,但是开发工具会使用这个工具打包 apk 文件构成一个 Android 应用程序。

Android 的主要调试工具是 adb(Android debuging bridge),ddms 是一个在 adb 基础上的一个图形化工具。adb,它是一个命令行工具。而 ddms 功能与 adb 相同,只是它有一个图形化界面。对不喜欢命今操作方式的人

来说是一个不错的选择。

12、ddms 和 traceview 的区别

ddms 原意是:davik debug monitor service。简单的说 ddms 是一个程序执行查看器,在里面可以看见线程和堆栈等信息,traceView 是程序性能分析器。traceview 是 ddms 中的一部分内容。

14、Android 中数据存储方式有哪些?

a)文件存储

b)xml,SharedPreference

c)SQLiteDatabase

d)ContentProvider

e)网络

15、DVM 和 JVM 的区别?

a)dvm 执行的是.dex 文件,而 jvm 执行的是.class。Android 工程编译后的所有.class 字节码会被 dex 工具抽取到一个.dex 文件中。

b)dvm 是基于寄存器的虚拟机 而 jvm 执行是基于虚拟栈的虚拟机。寄存器存取速度比栈快的多,dvm 可以根据硬件实现最大的优化,比较适合移动设备。

c).class 文件存在很多的冗余信息,dex 工具会去除冗余信息,并把所有的.class 文件整合到.dex 文件中。减少了 I/O 操作,提高了类的查找速度。

16、谈一谈 Android 的安全机制

1、Android 是基于 Linux 内核的,因此 Linux 对文件权限的控制同样适用于 Android

在 Android 中每个应用都有自己的/data/data/包名 文件夹,该文件夹只能该应用访问,而其他应用则无权访问。

2、Android 的权限机制保护了用户的合法权益如果我们的代码想拨打电话、发送短信、访问通信录、定位、访问 sdcard 等所有可能侵犯用于权益的行为都

是必须要在 AndroidManifest.xml 中进行声明的,这样就给了用户一个知情权。

3、Android 的代码混淆保护了开发者的劳动成果

17、Android 的四大组件都需要在清单文件中注册吗?

Activity 、 Service 、 ContentProvider 如果要使用则必须在 AndroidManifest.xml 中进行注册,而

BroadcastReceiver 则有两种注册方式,静态注册和动态注册。其中静态注册就是指在 AndroidManifest.xml 中进行

注册,而动态注册时通过代码注册。

18、在 Android 中进程的级别有哪些?

a)Foreground process

b)Visible process

c)Service process

d)Background process

e)Empty process

二、Activity

1、什么是 Activity?

四大组件之一,通常一个用户交互界面对应一个activity。activity 是Context的子类,同时实现了window.callback

和 keyevent.callback, 可以处理与窗体用户交互的事件。

常见的 Activity 类型有 FragmentActivitiy,ListActivity,TabAcitivty 等。如果界面有共同的特点或者功能的时候,还会自己定义一个 BaseActivity。

2、请描述一下 Activity 生命周期

Activity 从创建到销毁有多种状态,从一种状态到另一种状态时会激发相应的回调方法,这些回调方法包括: onCreate onStart onResume onPause onStop onDestroy

其实这些方法都是两两对应的,onCreate 创建与 onDestroy 销毁; onStart 可见与 onStop 不可见;onResume 可编辑(即焦点)与 onPause;

这 6 个方法是相对应的,那么就只剩下一个 onRestart 方法了,这个方法在什么时候调用呢?

答案就是:在 Activity 被 onStop 后,但是没有被 onDestroy,在再次启动此 Activity 时就调用 onRestart(而不再调用 onCreate)方法;

如果被 onDestroy 了,则是调用 onCreate 方法。

3、Activity 的状态都有哪些?

a)foreground activity

b)visible activity

c)background activity

empty process

4、如何保存 Activity 的状态?

Activity 的状态通常情况下系统会自动保存的,只有当我们需要保存额外的数据时才需要使用到这样的功能。一般来说, 调用 onPause()和 onStop()方法后的 activity 实例仍然存在于内存中, activity 的所有信息和状态数据

不会消失, 当 activity 重新回到前台之后, 所有的改变都会得到保留。

但是当系统内存不足时, 调用onPause()和onStop()方法后的activity可能会被系统摧毁, 此时内存中就不会存有该 activity 的实例对象了。如果之后这个 activity 重新回到前台, 之前所作的改变就会消失。为了避免此种情况的发生,

我们可以覆写 onSaveInstanceState()方法。onSaveInstanceState()方法接受一个 Bundle 类型的参数, 开发者可以将状态数据存储到这个 Bundle 对象中, 这样即使 activity 被系统摧毁, 当用户重新启动这个 activity 而调用它的onCreate()方法时, 上述的 Bundle 对象会作为实参传递给 onCreate()方法, 开发者可以从 Bundle 对象中取出保存的数据, 然后利用这些数据将 activity 恢复到被摧毁之前的状态。

需要注意的是, onSaveInstanceState()方法并不是一定会被调用的, 因为有些场景是不需要保存状态数据的. 比

如用户按下 BACK 键退出 activity 时, 用户显然想要关闭这个 activity, 此时是没有必要保存数据以供下次恢复的, 也

就是 onSaveInstanceState()方法不会被调用. 如果调用 onSaveInstanceState()方法, 调用将发生在 onPause()或onStop()方法之前。

@Override

protected void onSaveInstanceState(Bundle outState) { // TODO Auto-generated method stub super.onSaveInstanceState(outState);

}

5、两个 Activity 之间跳转时必然会执行的是哪几个方法?

一般情况下比如说有两个 activity,分别叫 A,B,当在 A 里面激活 B 组件的时候, A 会调用 onPause()方法,然后 B 调

用 onCreate() ,onStart(), onResume()。这个时候 B 覆盖了窗体, A 会调用 onStop()方法. 如果 B 是个透明的,或者是对话框的样式, 就不会调用 A 的onStop()方法。

6、横竖屏切换时 Activity 的生命周期

此时的生命周期跟清单文件里的配置有关系。

1、不设置 Activity 的 android:configChanges 时,切屏会重新调用各个生命周期默认首先销毁当前 activity,然后重新加载。

2、设置 Activity 的 android:configChanges=”orientation|keyboardHidden|screenSize”时,切屏不会重新调用各个生命周期,只会执行 onConfigurationChanged 方法。

通常在游戏开发, 屏幕的朝向都是写死的。

7、如何将一个 Activity 设置成窗口的样式?

只需要给我们的 Activity 配置如下属性即可。

android:theme=”@android:style/Theme.Dialog”

8、如何退出 Activity?如何安全退出已调用多个 Activity 的 Application?

1、通常情况用户退出一个 Activity 只需按返回键,我们写代码想退出 activity 直接调用 finish()方法就行。

2、记录打开的 Activity:

每打开一个 Activity,就记录下来。在需要退出时,关闭每一个 Activity 即可。

3、发送特定广播:

在需要结束应用时,发送一个特定的广播,每个 Activity 收到广播后,关闭即可。

//给某个 activity 注册接受接受广播的意图

registerReceiver(receiver, filter)

//如果过接受到的是 关闭 activity 的广播 就调用 finish()方法 把当前的 activity finish()掉4、递归退出

在打开新的 Activity 时使用 startActivityForResult,然后自己加标志,在 onActivityResult 中处理,递归关闭。

5、其实 也可以通过 intent 的 flag 来实现 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)激活一个新的 activity。此时如果该任务栈中已经有该 Activity,那么系统会把这个 Activity 上面的所有 Activity 干掉。其

实相当于给 Activity 配置的启动模式为 SingleTop。

9、请描述一下 Activity 的启动模式都有哪些以及各自的特点

启动模式(launchMode)在多个 Activity 跳转的过程中扮演着重要的角色,它可以决定是否生成新的 Activity 实例,是否重用已存在的 Activity 实例,是否和其他 Activity 实例公用一个 task 里。这里简单介绍一下 task 的概念,task 是

一个具有栈结构的对象,一个 task 可以管理多个 Activity,启动一个应用,也就创建一个与之对应的 task。

Activity 一共有以下四种 launchMode:

1.standard

2.singleTop

3.singleTask

4.singleInstance

我们可以在 AndroidManifest.xml 配置的 android:launchMode 属性为以上四种之一即可。下面我们结合实例一一介绍这四种 lanchMode:

8.1 standard

standard 模式是默认的启动模式,不用为配置 android:launchMode 属性即可,当然也可以指定值为 standard。

时间: 2024-08-04 19:12:13

安卓基础到入门学习(复习笔记)的相关文章

Surveillance Monitering入门学习论文笔记(一)

本科毕业设计需要,最近开始进行Surveillance Monitering的入门学习.对看过的论文进行一些摘录和整理,一方面方便自己勘察,另一方面可以与大家进行交流学习.由于水平.基础有限,希望大家不吝赐教,谢谢~ 论文来自: [1]胡琼,秦磊,黄庆明. 基于视觉的人体动作识别综述[J]. 计算机学报,2013,12:2512-2524. ******************************************************* 部分内容为网上摘录,由于时间有限未能列出所有

20天零基础Linux入门学习到精通视频直播

讲师介绍:老男孩IT教育-李导李老师多年Linux一线实战经验及Linux教学经验,擅长以图形表达讲解抽象概念,善于用 简单易懂的例子讲解重点难点,严肃不失幽默,著有<跟老男孩学Linux三剑客>一书. 本次课程知识点:帮你快速入门linux知识点,让你真正从小白到精通. 本次课程市场价值:599元 报名链接:https://ke.qq.com/course/202854 [课程大纲] 计算机基本组成-Linux服务器硬件基础-linux发展历史 计算机组成简介 服务器核心硬件组成.操作系统组

salesforce 零基础开发入门学习(一)Salesforce功能介绍,IDE配置以及资源下载

https://www.cnblogs.com/zero-zyq/p/5275134.html 目前国内已经有很多公司做salesforce,但是国内相关的资料确是少之又少.上个月末跳槽去了新公司,主要做的就是salesforce,不过当时想要看一些相关资料确实比较难.为了避免想要零基础学习的人少走一点弯路,所以整理一下这几天学到的简单的东西,包括登录salesforce后如何操作,如何下载配置IDE等简单入门操作. 一)给大家一些链接方便学习,查找和提问. 1)salesforce开发者官网:

salesforce 零基础开发入门学习(八)数据分页简单制作

本篇介绍通过使用VF自带标签和Apex实现简单的数据翻页功能. 代码上来之前首先简单介绍一下本篇用到的主要知识: 1.ApexPages命名空间 此命名空间下的类用于VF的控制. 主要的类包括但不限于以下: ApexPages.StandardController:当为一个标准Controller定义扩展的时候使用此类.StandardController对象为Salesforce提供的预构建VF的控制器对象引用; ApexPages.Action:使用Action类和方法用于VF自定义控制器和

salesforce 零基础开发入门学习(九)Approval Process 介绍

在阅读此篇文章前,可以先参考阅读一个前辈总结的关于Approval Process的操作.以下为参考的链接: http://www.cnblogs.com/mingmingruyuedlut/p/3765777.html Approval Process用于流程审批,Apex主要涉及到的命名空间和类为Approval命名空间以及System命名空间下的Approval类. 其中Approval命名空间下主要的类为: ProcessRequest ProcessSubmitRequest Proc

salesforce 零基础开发入门学习(七)PickList的value值获取

之前介绍过PickList类型的声明以及赋值,但是如何取出呢?一个sObject对象可以理解为一条数据.通过sObject直接取恐怕很难做到,因为他只会显示一个值.这时候就要用到Schema命名空间中的类与方法以及System命名空间下的Schema类来实现. Schema类 Schema命名空间和Schema类不是同一个概念.Schema类属于System命名空间下,Schema命名空间包含很多类处理Schema元数据信息. Schema类的方法包含schema 信息描述. Schema类主要

JSON入门学习案例笔记

1.JSON是什么: JSON 即JavaScript Object Notation,它是一种轻量级的数据交换格式,非常适合于服务器与JavaScript的交互.JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写,同时也易于机器解析和生成.它基于JavaScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Pyth

salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解

建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schema Builder查看表结构以及多表之间的关联关系,可以登录后点击setup在左侧搜索框输入schema Builder 或者build-->schema Builder进入: 2.采用force.com Explorer通过自己写查询语句来查询数据. 此链接为force.com Explorer的下载链接:  http://force-com-explorer-beta.software.infor

salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句

salesforce如果简单的说可以大概分成两个部分:Apex,VisualForce Page. 其中Apex语言和java很多的语法类似,今天总结的是一些简单的Apex的变量等知识. 有如下几种常用的基本变量Integer,String,Decimal,Double,Long,Boolean,ID. 集合常用的对象:List<T>,Set<T>,Map<T>. 时间日期常用对象:Datetime,Time,Date. 其他:Object,sObject(与数据库相关