您的位置:首页 > 移动开发 > Android开发

Android应用程序基础(Manifest结构预览约定和进程生命周期)

2015-02-25 22:04 507 查看
一、应用程序资源介绍

1.R类及资源的关系

2.res资源文件夹

3.常用的资源及其所在文件夹


value资源:

1)string

2)color(argb,a:α通道,即透明度;r:red;g:green;b:blue)

3)dimen 比较px(像素),dp(dip:与密度无关的相对像素),sp(与密度和范围都无关的像素)

px(screen pixels)像素

in(physical inches)英寸

pt(pysical points)点距

mm(physical millimeters)毫米

dp(density-independent pixels relative to a 160-dpi screen)密度无关像素

sp(scale-independent pixels)范围无关像素

[长宽高用dp]

[字体相关用sp]

4)array

5)Location a.value-fr

b.value-en

value资源

<?xml version="1.0" encoding="utf-8"?>

<resources>

<string name="app_name">To Do List</string>

<color name="app_background">#FF0000FF</color>

<dimen name="default_border">5px</dimen>

<array name="string_array">

<item>Item 1</item>

<item>Item 2</item>

<item>Item 3</item>

</array>

<array name="integer_array">

<item>3</item>

<item>2</item>

<item>1</item>

</array>

</resources>

style & theme

<?xml version="1.0" encoding="utf-8"?>

<resources>

<style name="BaseText">

<item name="android:textSize">14sp</item>

<item name="android:textColor">#111</item>

</style>

<style name="SmallText" parent="BaseText">

<item name="android:textSize">8sp</item>

</style>

</resources>

drawable

drawable里面通常也会有跟界面元素美化相关的xml,可以参见系统应用程序的例子,

因此看到除了图片之外的xml不要惊慌

layout

anim(animation) 1.tweened animation(anim)


2.frame by frame animation(drawable)

tweened animation(anim)

<?xml version="1.0" encoding="utf-8">

<set xmlns:android="http://schemas.android.com/apl/res/android"

android:interpolator="@android:anim/acclerate_interploator">

<rotate

android:fromDegrees="0"

android:toDegrees="360"

android:pivotX="50%"

android:pivotY="50%"

android:startOffset="500"

android:duration="1000"/>

<scale

android:fromXScale="1.0"

android:toXScale="0.0"66 CHAPTER 3 CREATING APPLICATIONS AND ACTIVITIES

android:fromYScale="1.0"

android:toYScale="0.0"

android:pivotX="50%"

android:pivotY="50%"

android:startOffset="500"

android:duration="500"/>

<alpha

android:fromAlpha="1.0"

android:toAlpha="0.0"

android:startOffset="500"

android:duration="500"/>

</set>

frame by frame animation(drawable)

<animation-list

xmlns:android="http://schemas.android.com/apk/res/android"

android:oneshot="false">

<item android:drawable="@drawable/rocket1" android:duration="500"/>

<item android:drawable="@drawable/rocket2" android:duration="500"/>

<item android:drawable="@drawable/rocket3" android:duration="500"/>

</animation-list>

menu(menu)

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">

<item android:id="@+id/menu_refresh"

android:title="Refresh"/>

<item android:id="@+id/menu_settings"

android:title="Setting"/>

</menu>


调用应用程序资源:

1)代码中调用

2)资源文件之间相互调用

3)调用系统资源

4)指定当前主题的样式

指定当前主题格式

<EditText

android:id="@+id/myEditText"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/stop_message"

android:textColor="?android:textColor"/>

注:元素都要小写,

Manifest文件及其声明

1)应用程序的全局配置文件

2)应用程序的入口配置

1.Manifest结构预览

<?xml version="1.0" encoding="utf-8"?>

<manifest>

<uses-permission /> -设置应用程序使用的权限

<permission /> - 自定义权限

<permission-tree /> - 自定义权限树 -方便我们有大量权限的时候,动态添加权限到树

<permission-group /> - 自定义权限组

<instrumentation / > - 测试构件(以单位测试为主)

<uses-sdk /> - 使用sdk版本

<uses-configuration />

<uses-feature />

<support-screens />

<compatible-screens />

<supports-gl-texture />

<application>

<activity>

<intent-filter>

<action />

<category />

<data />

</intent-filter>

<meta-data />

</activity>

<activity-alias>

<intent-filter>...<.intent-filter>

<meta-data/>

</activity-alias>

<service>

<intent-filter>...</intent-filter>

<meta-data/>

</service>

<receiver>

<intent-filter>...</intent-filter>

<meta-data />

</receiver>

<provider>

<grant-uri-permission>

<meta-data />

</provider>

<uses-library />

</application>

</manifest>

2.文件约定

1)Elements(元素)

a.元素全部用小写

b.<manifest><application>必须有且仅有一个

c.同一级别的元素顺序无关,除了<activity-alias>必须跟在<activity>之后

2)Attributes(属性)

a.属性都是可选的

b.除了<manifest>的属性,其他元素属性都有android:前缀,但在类里面,这些是去掉的

3)声明类的名称

<manifest...>

<application...>

<service android:name="com.example.project SecretService"...>

...

</service>

...

</application>

</manifest>

比较二者

<manifest package="com.example project"...>

<application...>

<service android:name="SecretService"...>

...

</service>

...

</application>

</manifest>

4)多值

<inten-filter...>

<action android:name="android.intent.action.EDIT|INSERT|DELETE" />

<action android:name="android.intent.action.INSERT" />

<action android:name="android.intent.action.DELETE" />

...

</intent-filter>

5)资源值

资源引用格式:

@[package:]type:name

比如:

<activity android:icon="@drawable/smallPic"...>

主题引用格式:

?[package:]type:name

3.Manifest的作用及使用举例

1)包的唯一指定名

2)Android四大组件的定义:Activity,Service,BroadcastReceiver,Content Provider

3)定义应用程序具备的权限

4)定义Instrumatation做自动化测试

5)定义应用程序所需的最小API版本号

6)列出应用程序所需要的类库

4.Manifest如何解析的?

如果你是设计,如何设计?

1)应用程序安装的时候,manifest信息会放到一张系统索引表里面

2)系统启动的时候,PackagedManageService读取Manifest信息

3)应用程序启动时候,Launcher进行系统级判断,比如zuixiaoSDK等

Lab:设定minSDK > 你当前机器或者模拟器版本,测试启动现象

4)四大组件在需要的时候实例化

Lab:不配置一个Activity(非主Activity),看看不调用的时候系统会是否异常


Android进程生命周期(Process Lifecycle)

面试题:在应用程序中,突然按了Back按钮,当前应用程序关闭了么?Activity消亡了么?


Android5个进程等级

----------------------------------------------

1.Active Process | critical priorl

↓ |

-----------------------------------------------

2.Visible Process | High Priority

↓ |

3.Started Service Process |

↓ |

-----------------------------------------------

|

4.Background Process | Low Priority

↓ |

5.Empty Process |

----------------------------------------------

1.Active Process

1)正处于Activity Resume()状态

2)正处于与bound服务交互的状态

3)正处于服务在前台运行的状态,(startForeground()被调用)

4)Service生命周期函数正在被执行(onCreate(),onStart(),onDestroy())

5)BroadcastReceiver正在执行onReceive()方法

杀死Foreground Process 需要用户响应,因为这个安全优先级是最高的

2.Visible Process

当前进程不是焦点进程,Activity不在前端显示,但也没有完全隐藏,能够看得见,比如弹出一个对话框。(Input Method)

一个bound到visible或者foreground的activity的Service

3.Service Process

正在运行的,不再上述两种状态的Service

4.Background Process

不可见状态的Activity进程,又没有任何相关的Service运行的(onStop()被调用),系统有个后台进程列表,一般情况采取后进先出的原则来释放后台进程资源

Android进程如何启动和消亡的?

AndroidApplication Class App Lifecycle event method

退出进程的两种方式

finish();//不会关闭进程,只是关掉当前Activity

system.exit(0);//0代表关闭所有进程


Process.killProcess(Process.myPid())

----------------------------------------------------------------------------------------------------------------

后续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: