![cover](https://img-blog.csdnimg.cn/img_convert/48a3ef3f4588483b90967069e3e02747.png)
android应用程序开发---总结
Android 应用程序开发是一种基于 Android 操作系统的软件开发技术,它允许开发者使用 Java 编程语言和 Android SDK(软件开发工具包)来创建 Android 应用程序。Android 应用程序可以运行在 Android 智能手机、平板电脑、智能手表等设备上,通过 Play 商店等应用商店进行发布和分发。
目录
2.选择适合自己的布局(建议选择empty activity)
关于android应用的介绍:
Android 应用程序开发是一种基于 Android 操作系统的软件开发技术,它允许开发者使用 Java 编程语言和 Android SDK(软件开发工具包)来创建 Android 应用程序。
Android 应用程序可以运行在 Android 智能手机、平板电脑、智能手表等设备上,通过 Play 商店等应用商店进行发布和分发。
Android 应用程序开发需要使用 Android Studio 开发环境,它是一种由 Google 官方推荐的开发工具,可以帮助开发者创建和测试 Android 应用程序。
在 Android 应用程序开发中,开发者需要了解 Android 操作系统的基本知识和应用程序开发的基本流程。常见的应用程序类型包括社交网络、游戏、媒体、教育等。
一、环境准备
- 在开始开发Android应用程序之前,你需要安装Android Studio和Java Development Kit(JDK)。
- Android Studio是Google官方提供的开发环境,它包括许多有用的工具和库,可以帮助你更轻松地创建应用程序。JDK是一种Java编程语言的开发工具,它是Android应用程序开发的基础。
二、创建第一个Android App
步骤如下:
1.输入项目名称
2.选择适合自己的布局(建议选择empty activity)
3.选好就点击完成就OK了
三、Android开发中的一些基本概念
Android应用程序由一些零散的有联系的组件组成,通过一个工程manifest绑定在一起。在manifest中,描述了每一个组件以及组件的作用,其中有6个组件,它们是Android应用程序的基石。Android有四大组件(也有说六大组件的,外加Intent和Notification),分别是Activity,Service,Content Provider和BroadcastReceiver。这四大组件一起组成了完整的Android程序。我们将分别简要介绍。
- Android应用的四大组件:Activity、Service、Broadcast Receiver和Content Provider。
- Android应用的基本UI元素:TextView、Button、EditText、ListView等。
- Android应用的布局:LinearLayout、RelativeLayout、TableLayout、FrameLayout等。
- Android应用的生命周期:onCreate、onStart、onResume、onPause、onStop和onDestroy。
- Android应用的数据存储:SQLite数据库、SharedPreferences、文件存储等。
- Android应用中的网络通信:HTTP请求、JSON解析、XML解析等。
- Android应用中的多线程处理:AsyncTask、Handler、Thread等。
- Android应用的调试工具:Logcat、Debug模式、DDMS等。
- Android应用的发布:生成签名证书、打包APK文件、发布到Google Play等。
1.Activity:
是Android应用程序中的一个屏幕,用户与之交互,所有的应用程序都必须至少包含一个Activity,Activity中文是活动的意思,它在Android里面是指一个完整的占了一个屏幕的页面(上下滑动的内容也算这个界面内的内容,所以它的概念可以理解成类似网站的一个网页一样)。Activity允许显示一些控件、视图,并可以监听处理用户的事件,做出响应等。Activity之间通过Intent通信(调用、跳转等动作)。
一个Activity实际上是一个XML文件,它可以被Android系统以可视化的界面展现。而每一个Activity都与一个Java后台程序相联系,这个Java程序可以控制这个页面的启动、展示以及数据等信息。页面上展示的内容可以通过Activity本身的xml文件配置,也可以由相联系的Java文件来控制。
一个应用程序可以包含多个 Activity,每个 Activity 都有自己的生命周期。
Activity 生命周期包括以下几个阶段:
- onCreate():当 Activity 第一次创建时调用,用于初始化界面和其他变量。
- onStart():当 Activity 可见但未获得焦点时调用。
- onResume():当 Activity 可见并且获得焦点时调用,此时用户可以与界面交互。
- onPause():当用户离开 Activity 时调用,但它仍然可见,用于保存状态和取消正在进行的操作。
- onStop():当 Activity 不再可见时调用,用于释放资源和保存状态。
- onDestroy():当 Activity 被销毁时调用,用于释放所有资源。
通过管理 Activity 的生命周期,可以有效地控制应用程序的内存使用和性能。此外,一个 Activity 可以通过 Intent 启动另一个 Activity,从而实现不同屏幕之间的跳转和交互。
2.Intent:
在Android中,Intent是一种机制,用于在不同组件(例如Activity、Service、BroadcastReceiver等)之间传递信息。Intent可以用于启动Activity、启动Service、发送Broadcast等操作。Intent允许开发人员指定要执行的操作(例如查看某个网址或拨打电话),以及传递必要的数据(例如电话号码或地理位置)。
Intent可以分为两种类型:显式Intent和隐式Intent。显式Intent指定要启动的组件的名称,而隐式Intent则指定要执行的操作,例如打开浏览器或发送电子邮件。
在创建Intent时,可以使用putExtra方法来附加额外的信息,例如字符串、整数、布尔值等。这些额外的信息可以在目标组件中使用getIntent方法来获取。
在Android开发中,Intent是非常重要的,它可以帮助开发人员实现组件之间的通信,并且可以实现多种功能。
实现Intent的传值可以参考这位博主的文章:Android中基本Intent传值详解_中二李的博客-CSDN博客
3.Service:
Service是服务的意思。它是Android程序中“不可见”的部分,但是它负责更新数据源、触发通知等。它是一种没有界面的长生命周期的适合监控或者在后台运行的程序。最佳的例子是多媒体播放器。如百度百科的例子,多媒体播放器程序可能含有一个或多个Activity,用户通过这些 Activity选择并播放音乐。然而,音乐回放并不需要一个Activity来处理,因为用户可能会希望音乐一直播放下去,即使退出了播放器去执行其它程序。为了让音乐一直播放,多媒体播放器Activity可能会启动一个Service在后台播放音乐。Android系统会使音乐回放Service一直运行,即使在启动这个Service的Activity退出之后。
Android服务有两种:一是本地服务,另一种是远程服务。前者只能由托管服务的应用程序访问,后者是指由设备上其他应用程序进行远程访问的服务。
4.Broadcast Receiver:
在 Android 平台上,Broadcast Receiver 是一种可以接收系统或者应用程序广播消息的组件。广播消息可以是来自系统的消息,比如通知、电池电量变化等等,也可以是来自应用程序的消息,比如数据下载完成、网络状态变化等等。Broadcast Receiver 可以在应用程序的不同组件之间进行数据传递,比如可以从 Service 发送消息到 Broadcast Receiver,Broadcast Receiver 可以向 Activity 发送消息。Broadcast Receiver 可以在应用程序被关闭后仍然保持运行状态,直到它完成了任务或者被显式地停止。通过 Broadcast Receiver,你可以接收系统或者应用程序发出的广播消息,并根据这些消息执行一些必要的操作,比如更新 UI、启动 Service、发送通知等等。
5.Content Provider:
Content Provider是指内容提供器。App运行的时候需要很多外部数据作为支撑,这些数据一般由内容提供器存储、共享。比如,我们可以配置自己的Content Provider来存取其他应用程序,或者是通过其他应用程序给出的Content Provider来获取他们的数据。系统本身也提供了一些Content Provider,如联系人信息等。
这些数据可以存储在文件系统、SQLite数据库或者其他一些媒介里。
6.Fragment:
Fragment是一种可以嵌入在Activity当中的UI片段
用来组建Activity界面的局部模块, 也可以说一个Actiivty界面可以由多个Fragment组成
其行为与Activity很相似, 有自己对应的布局(包含具体的View), 它有自己的生命周期,接收自己的输入事件,并且可以从运行中的activity中添加或移除
一个fragment必须总是嵌入在一个activity中,同时fragment的生命周期受activity的影响
本质上会产生一个FrameLayout,它加载的布局为其子布局。
生命周期:
①Activity加载Fragment的时候,依次调用下面的方法: onAttach -> onCreate -> onCreateView -> onActivityCreated -> onStart ->onResume②当我们弄出一个悬浮的对话框风格的Activity,或者其他,就是让Fragment所在的Activity可见,但不获得焦点 onPause
③当对话框关闭,Activity又获得了焦点: onResume
④当我们替换Fragment,并调用addToBackStack()将他添加到Back栈中 onPause -> onStop -> onDestoryView !!注意,此时的Fragment还没有被销毁哦!!!
⑤当我们按下键盘的回退键,Fragment会再次显示出来: onCreateView -> onActivityCreated -> onStart -> onResume
⑥如果我们替换后,在事务commit之前没有调用addToBackStack()方法将 Fragment添加到back栈中的话;又或者退出了Activity的话,那么Fragment将会被完全结束, Fragment会进入销毁状态 onPause -> onStop -> onDestoryView -> onDestory -> onDetach
优势:
- 模块化:我们不必把所有代码全部写在Activity中,而是把代码写在各自的Fragment中。
- 可重用:多个Activity可以重用一个Fragment。
- 可适配:根据硬件的屏幕尺寸、屏幕方向,能够方便地实现不同的布局,这样用户体验更好。
7.文件介绍:
7.1 Manifest文件:
是Android应用程序的配置文件,用于声明应用程序的组件和权限等信息。
叫做清单文件,它描述了整个项目的信息,包括项目名称、SDK版本等等。假设我们项目的清单文件如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.MyFrist">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
例如,在这里,从第5行开始,以android
开头的行描述本项目程序的信息,比如第5行到第10行是描述一些图标,主题信息,里面引用了后面的资源文件夹中的values文件夹下面的资源信息。以activity
开头的行则描述本程序涉及到哪些界面(翻译为活动,一个Activity活动对应一个屏幕的UI界面)。
例如第12行描述了本项目的MainActivity
页面。这个活动下面设置了意图过滤(intent-filter,为啥叫这个我也不清楚)的信息,它描述了该页面的一些信息,比如这个android.intent.action.MAIN
表明这个活动是本程序的入口页面。你在应用程序中的每个活动必须在AndroidManifest.xml
文件中声明。
7.2 java文件夹:
主要是存放java源程序的地方。注意我们这里有一些以Activity结尾的程序文件,每一个文件其实对应了一个Activity的页面。也就是和下面资源文件夹(res)中的layout里面的内容绑定的。
7.3 res文件夹(提供资源):
我们应该始终外部化应用资源,例如图像和代码中的字符串,这样有利于您单独维护这些资源。 此外,还应该为特定设备配置提供备用资源,方法是将它们分组到专门命名的资源目录中。 在运行时,Android 会根据当前配置使用适当的资源。例如,我们可能需要根据屏幕尺寸提供不同的 UI 布局,或者根据语言设置提供不同的字符串。
外部化应用资源后,即可使用在项目 R 类中生成的资源 ID 访问这些资源。有关如何在应用中使用资源,我们将在访问资源中讨论。
而资源一般都是在这个res文件夹下面,包括图片、布局文件、菜单等等。我们将分别介绍。
7.4 drawable资源
drawable英语是可拉伸的意思,在这里我们可以理解为存放位图的文件夹,因此称之为位图资源。也就是存放jpg、png等图片资源的文件夹了。
如下图所示(注意:这里的drawable没有区分不同分辨率的图片。一般情况需要根据高中低三种不同分辨率放置三种不同清晰度的图片,便于系统调用,同时也有可能需要存放不同尺寸的图片),这里有两种drawable资源,一种是我们常见的图像资源,如ec.jpg、hfut.jpg等。另一种是xml类型的drawable资源。前者叫Image Asset
,后者叫Vector Asset
。前面是图像资源,拥有固定大小和尺寸,因此放大和缩小都有问题。一般而言,这种资源要存放多个不同尺寸的版本供调用。而后者是响亮资源,它其实是一系列命令,告诉你应该如何画图。因此这种资源可以适应不同尺寸或者分辨率的情况。因为系统可以根据这些命令来画图。
7.5 layout资源
layout文件夹存放的是布局资源。布局也就是指Android里面的活动和视图了。在Android中,占用一个屏幕的UI界面称之为Activity(活动)
,页面中的按钮、标签、文本字段等称之为View(视图)
。一个活动通常包含一个或者多个视图(也就是一个页面里面有按钮啊,文本啊之类的东西)。这里的布局文件都是XML文件,因为Android中视图都是从XML文件加载的。里面描述了位置、大小等等视图信息。布局资源下每个文件都将根据其文件名(不包含扩展名)生成一个唯一的常量,这些常量也就是其ID,可以通过某些手段与java源文件绑定,或者被其他页面调用。
layout的文件都是xml文件,在每一个xml文件中,我们可以定义一些TextView、ImageView,以及其他的等等。
7.6 Layout文件:
是Android中用于定义用户界面的XML文件,可以包含各种控件和布局。
layout文件夹存放的是布局资源。布局也就是指Android里面的活动和视图了。在Android中,占用一个屏幕的UI界面称之为Activity(活动)
,页面中的按钮、标签、文本字段等称之为View(视图)
。一个活动通常包含一个或者多个视图(也就是一个页面里面有按钮啊,文本啊之类的东西)。这里的布局文件都是XML文件,因为Android中视图都是从XML文件加载的。里面描述了位置、大小等等视图信息。布局资源下每个文件都将根据其文件名(不包含扩展名)生成一个唯一的常量,这些常量也就是其ID,可以通过某些手段与java源文件绑定,或者被其他页面调用。
layout的文件都是xml文件,在每一个xml文件中,我们可以定义一些TextView、ImageView,以及其他的等等。
7.7 values资源
values资源是Android中存放数组、颜色、尺寸、字符串和样式的文件夹。通常有如下文件:
/res/values/strings.xml
/res/values/colors.xml
/res/values/dimens.xml
/res/values/attrs.xml
/res/values/styles.xml
其实就是统一存放所有的变量的地方,比如主题颜色、app名称、Logo的样式等。在values资源下统一定义可以使得我们在各个地方都调用同样的资源,在修改的时候也只要更改一处即可。
在values这些资源定义也很简单,主要以定义string为例,如下,尖括号定义资源类型,name表示资源名称,里面表示内容:
<string name="app_name">淘宝</string>
<string name="edit_message">请输入您想查询的地点</string>
7.8 minmap
minmap是Android软件存放程序启动图标的文件夹。一般地它只存放这个启动图标(就是桌面图标)。
8.案例分享:
下面是一个简单的Android应用示例,该应用可以实现简单的计算器功能。该应用可以接受用户的输入,并根据用户的输入进行加、减、乘、除等计算操作。
MainActivity.java:
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private EditText mEtNum1;
private EditText mEtNum2;
private TextView mTvResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mEtNum1 = (EditText) findViewById(R.id.et_num1);
mEtNum2 = (EditText) findViewById(R.id.et_num2);
mTvResult = (TextView) findViewById(R.id.tv_result);
Button btnAdd = (Button) findViewById(R.id.btn_add);
Button btnSub = (Button) findViewById(R.id.btn_sub);
Button btnMul = (Button) findViewById(R.id.btn_mul);
Button btnDiv = (Button) findViewById(R.id.btn_div);
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int num1 = Integer.parseInt(mEtNum1.getText().toString());
int num2 = Integer.parseInt(mEtNum2.getText().toString());
int result = num1 + num2;
mTvResult.setText(String.valueOf(result));
}
});
btnSub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int num1 = Integer.parseInt(mEtNum1.getText().toString());
int num2 = Integer.parseInt(mEtNum2.getText().toString());
int result = num1 - num2;
mTvResult.setText(String.valueOf(result));
}
});
btnMul.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int num1 = Integer.parseInt(mEtNum1.getText().toString());
int num2 = Integer.parseInt(mEtNum2.getText().toString());
int result = num1 * num2;
mTvResult.setText(String.valueOf(result));
}
});
btnDiv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int num1 = Integer.parseInt(mEtNum1.getText().toString());
int num2 = Integer.parseInt(mEtNum2.getText().toString());
int result = num1 / num2;
mTvResult.setText(String.valueOf(result));
}
});
}
}
activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/et_num1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入第一个数"
android:inputType="number" />
<EditText
android:id="@+id/et_num2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/et_num1"
android:hint="请输入第二个数"
android:inputType="number" />
<Button
android:id="@+id/btn_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/et_num2"
android:layout_alignParentLeft="true"
android:text="+" />
<Button
android:id="@+id/btn_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/et_num2"
android:layout_toRightOf="@+id/btn_add"
android:text="-" />
<Button
android:id="@+id/btn_mul"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/et_num2"
android:layout_toRightOf="@+id/btn_sub"
android:text="*" />
<Button
android:id="@+id/btn_div"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/et_num2"
android:layout_toRightOf="@+id/btn_mul"
android:text="/" />
<TextView
android:id="@+id/tv_result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/btn_add"
android:text="计算结果"
android:textAlignment="center" />
</RelativeLayout>
这是一个非常简单的示例,但是它可以帮助您快速入门Android应用开发。如果您想深入了解Android应用开发,可以参考官方文档或者查找相关教程。
五、总结:
Android应用程序开发是一项非常有趣和有挑战性的技能。在开发Android应用程序之前,你需要学习Java编程语言的基础知识,了解Android应用程序的基础知识,使用Android Studio创建应用程序,使用Android SDK、XML布局、Java代码、Android应用程序的API和第三方库来开发应用程序。最后,你需要进行调试和测试,以确保应用程序的质量和稳定性。
更多推荐
所有评论(0)