由于安卓智能手机的兴起,安卓系统APP开发已经成为最火热的软件开发行业。在这种大趋势下,很多人都开始了对安卓系统及应用开发的学习。
在我通过对安卓的简单学习后为方便自己后期检查和改正,现对已知的东西做个总结。
有漏再改先行记录。
AndroidManifest.xml 主程序配置文件
该xml为程序启动时,指引程序运行的配置文件,当前文件有且只有一份
manifest
主窗体节点 当前节点中 定义了 当前程序的主包包名 com.things.xcard 此包名大概率时当前项目的主包名
子节点
uses-permission 申请APP 权限,即APP启动时通知安卓系统当前应用程序需要那些权限,如网络权限,本地存储,拍照,录音。
application app运行时配置,控制当前程序可显示、显示状态、显示样式等
allowBackup 、icon、label、roundIcon、supportsRtl、usesCleartextTraffic、theme
其子节点 activity 为告知安卓系统可运行的视图控制器 并且通过当前节点中的 intent-filter 节点,告知安卓系统当前控制器 为程序得主窗体控制器 ,必须第一个启动它。
程序配置文件【此文件此后可能不需要开发者进行修改】
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.fyexing.thingscard"
minSdkVersion 19
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
}
安卓系统在程序启动之时,会通过程序的实例调用配置文件中的首个控制器 , 控制器 对 activity 实例化,activity 再实现可视化试图并展示。
最基础的可启动 activity
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
public class FirstActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
<!-- 创建可视化视图VIEW XML 配置模版 -->
setContentView(R.layout.activity_main);
}
}
安卓系统在对 activity 实例化时会调用 基类 的继承方法如
onCreate、onCreateOptionsMenu 等方法以创建当前控制器的可视实例化对象并展示。
由于安卓系统在程序运行、方向切换、应用程序间切换的处理存在性能和状态特殊处理,可能会对内存进行清空等其他操作。在程序执行这些操作时给与开发者多个接口以供开发者自行缓解这些内存清空,程序初始化等不友好的体验。
onStart、onPause、onStop、onDestroy、onSaveInstanceState等
protected void onSaveInstanceState(Bundle outState) {
String key = "name"; // 键
String value = "value"; // 值
outState.putSerializable(key,value);
super.onSaveInstanceState(outState);
}
这个被保存的Bundle会在onCreate时赋值给savedInstanceState并给与调用
String key = "name";
String value = savedInstanceState.getString(key);
每个控制器在返回或消除时可以提供一个返回结果,以方便当一个控制器调整显示另一个控制器时需要得到视图间传值给开发者留下了一个可设置回传值的方法
setResult
public final void setResult(int resultCode, Intent data) {
synchronized (this) {
mResultCode = resultCode;
mResultData = data;
}
}
resultCode 为 返回结果 的成功与失败
/** Standard activity result: operation canceled. */
public static final int RESULT_CANCELED = 0;
/** Standard activity result: operation succeeded. */
public static final int RESULT_OK = -1;
/** Start of user-defined activity results. */
public static final int RESULT_FIRST_USER = 1;
程序在启动其他控制器视图之后要获取其返回时,安卓会调用给定的方法给与返回值
onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
}
当前方法的 resultCode 为之前的 setResult里设置的,data 即也为当时设置的,而requestCode为启动时,
给其赋予的值
启动视图调用
// 当前 需要启动的控制器对象实体 的对像(FirstActivity.this)
// 及 初始化模版(FirstActivity.class)
Intent intent = new Intent(FirstActivity.this,FirstActivity.class);
// 启动模版后 返回当前 实体 对应的请求号,用以区分启动别的控制器时返回的结果
int resquestCode = 0;
startActivityForResult(intent,resquestCode);
startActivityForResult
public void startActivityForResult(@RequiresPermission Intent intent, int requestCode) {
startActivityForResult(intent, requestCode, null);
}
启动对象时 intent 内还能存储 需要传入到被启动对象中的参数
// name 为 键, value 为 值
intent.putExtra(name,value)
当控制器启动时(onCreate) 通过 savedInstanceState 传入控制器内
// name 为 键, value 为 值
value =getIntent().getString(name)
应用于谷歌安卓系统的app应用,需要遵循安卓系统给与设定的框架和实现机制,其中包括启动控制器配置、架包的引入、权限的配置、控制器初始化、创建可视化视图、所谓的生命周期以及视图间的传值和视图模版的规范。