Android 应用程序由四个模块构造而成:Activity、Intent 、Content Provider 、Service

下面简单介绍一下如下模块的含义:

1、Activity  "活动"
一个Activity就是单独的屏幕,每一个活动都被实现为一个独立的类,并且从活动基类中继承而来,活动类将会显示由视图控件组成的用户接口并对事件作出响应。代表一个用户能看到的屏幕,主要用于处理应用程序的整体性工作--如系统事件,用户显示等各种显示设计。

2、Intent  "请求"
用于不同的Activity之间切换使用,用于描述应用的功能。
其描述结构中,最重要的两个部分:动作(MAIN,VIEW,PICK,EDIT etc)及动作所对应的数据(URI..)

3、Content Provider 
用于将数据存储于文件及SQLITE数据库中或者其它有效设备中。提供应用数据与其它应用共享时使用。

4、Seriver "服务"
生命周期长但没有用户界面的程序,可一直在系统中执行,为多个客户端提供服务。

下面给出将这几者同时使用的例子,加入这些概念的理解与使用:

首先建立三个java文件,代码分别为:

主的Acitivy应用:

package com.example.com.test.app;import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.PhoneLookup;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;public class MainActivity extends Activity {private final static String TAG = "MainActivity";@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);          /* 设置显示main.xml布局 */setContentView(R.layout.activity_main);/* findViewById(R.id.button1)取得布局main.xml中的button1 */Button button = (Button) findViewById(R.id.button1);/* 监听button的事件信息 */button.setOnClickListener(new Button.OnClickListener() {public void onClick(View v) {/* 新建一个Intent对象 */Intent intent = new Intent();/* 指定intent要启动的类 */intent.setClass(MainActivity.this, SecondActivity.class);/* 启动一个新的Activity */startActivity(intent);/* 关闭当前的Activity */MainActivity.this.finish();}});//从main.xml布局中获得Button对象Button button_start = (Button)findViewById(R.id.PlayMusic);Button button_stop  = (Button)findViewById(R.id.StopMusic);Button button_cp    = (Button)findViewById(R.id.CProvider);//设置按钮(Button)监听button_start.setOnClickListener(startplay);button_stop.setOnClickListener(stopplay);button_cp.setOnClickListener(cplisten);}// 开始播放private OnClickListener startplay = new OnClickListener() {public void onClick(View v) {// 开启ServicestartService(new Intent("com.test.Android.MUSIC"));}};// 停止播放private OnClickListener stopplay = new OnClickListener() {public void onClick(View v) {// 停止ServicestopService(new Intent("com.test.Android.MUSIC"));}};// 测试 Content Providerprivate OnClickListener cplisten = new OnClickListener() {public void onClick(View v) {String string = "";   //得到ContentResolver对象ContentResolver cr = getContentResolver();  //取得电话本中开始一项的光标Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);// 向下移动一下光标while (cursor.moveToNext()) {// 取得联系人名字int nameFieldColumnIndex = cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME);String contact = cursor.getString(nameFieldColumnIndex);// 取得电话号码int numberFieldColumnIndex = cursor.getColumnIndex(PhoneLookup.NUMBER);String number = null; //cursor.getString(numberFieldColumnIndex);string += (contact + ":" + number + "\n");Log.i(TAG,"telephone string: " + string );}cursor.close();//设置TextView显示的内容DisplayText(string);}};/* 显示Toast */private void DisplayText(String str) {Toast.makeText(this, str, Toast.LENGTH_SHORT).show();}
}

切换的Activity应用:

package com.example.com.test.app;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;public class SecondActivity extends Activity{@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);/* 设置显示second.xml布局 */setContentView(R.layout.activity_second);/* findViewById(R.id.button1)取得布局main.xml中的button1 */Button button = (Button) findViewById(R.id.button1);/* 监听button的事件信息 */button.setOnClickListener(new Button.OnClickListener() {public void onClick(View v){/* 新建一个Intent对象 */Intent intent = new Intent();/* 指定intent要启动的类 */intent.setClass(SecondActivity.this, MainActivity.class);/* 启动一个新的Activity */startActivity(intent);/* 关闭当前的Activity */SecondActivity.this.finish();}});}
}

后台Service服务程序:

package com.example.com.test.app;import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;public class MusicService extends Service {// MediaPlayer对象private MediaPlayer player = null;public IBinder onBind(Intent arg0) {return null;}public void onStart(Intent intent, int startId) {super.onStart(intent, startId);// 这里可以理解为装载音乐文件player = MediaPlayer.create(this, R.raw.jiangnanstyle);// 循环播放player.setLooping(true);// 开始播放player.start();}public void onDestroy() {super.onDestroy();// 停止音乐-停止Serviceplayer.stop();}
}

AndroidManifest.xml应用中全局描述文件:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.com.test.app"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="10"android:targetSdkVersion="15" />##### 可以访问的权限设定<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission><application android:icon="@drawable/ic_launcher" android:label="@string/app_name">#### 主Activity<activityandroid:name=".MainActivity"android:label="@string/title_activity_main" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>#### 次Activity<activity android:name="SecondActivity"></activity>#### 服务Service<service android:name=".MusicService"><intent-filter><action android:name="com.test.Android.MUSIC" /><category android:name="android.intent.category.default" /></intent-filter></service></application></manifest>

资源相关文件:

layout 文件夹

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="fill_parent"><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_centerVertical="true"tools:context=".MainActivity" /><Buttonandroid:id="@+id/PlayMusic"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_above="@+id/textView1"android:layout_alignParentLeft="true"android:layout_marginBottom="52dp"android:layout_marginLeft="22dp"android:text="播放MP3音乐" /><Buttonandroid:id="@+id/button1"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_above="@+id/PlayMusic"android:layout_alignParentLeft="true"android:layout_marginBottom="67dp"android:layout_marginLeft="22dp"android:text="switch Second Activity" /><Buttonandroid:id="@+id/StopMusic"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/textView1"android:layout_alignBottom="@+id/textView1"android:layout_alignLeft="@+id/PlayMusic"android:text="停止播放MP3音乐" /><Buttonandroid:id="@+id/CProvider"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignLeft="@+id/StopMusic"android:layout_below="@+id/textView1"android:layout_marginTop="94dp"android:text="Content Provider Test" /></RelativeLayout>

activity_second.xml 内容:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="horizontal" ><Buttonandroid:id="@+id/button1"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:layout_marginTop="45dp"android:text="switch Main Activity" /></RelativeLayout>

新建了一个 res\raw 用于存放与应用一起打包的mp3文件:jiangnanstyle.mp3  江南Style,呵呵,最流行的音乐哟。

Android 应用程序相关推荐

  1. Xposed: 勾住(Hook) Android应用程序对象的方法,实现AOP

    Xposed Xposed能够勾住(Hook) Android应用程序对象的方法,实现AOP,一个简单的例子: public class WebViewHook implements IXposedH ...

  2. Android应用程序消息处理机制(Looper、Handler)分析(2)

    我们再回到NativeMessageQueue的构造函数中,看看JNI层的Looper对象的创建过程,即看看它的构造函数是如何实现的,这个Looper类实现在frameworks/base/libs/ ...

  3. 电子界卡组构建2019_2018–2019年构建现代Android应用程序的路线图

    电子界卡组构建2019 Kriptofolio应用程序系列-简介 (Kriptofolio app series - Introduction) Welcome to this series of b ...

  4. 在 Android 应用程序中使用 SQLite 数据库以及怎么用

    part one : android SQLite 简单介绍 SQLite 介绍 SQLite 一个非常流行的嵌入式数据库.它支持 SQL 语言,而且仅仅利用非常少的内存就有非常好的性能.此外它还是开 ...

  5. Android 应用程序窗体显示状态操作(requestWindowFeature()的应用)

    转自:http://www.cnblogs.com/salam/archive/2010/11/30/1892143.html 我们在开发程序是经常会需要软件全屏显示.自定义标题(使用按钮等控件)和其 ...

  6. php安卓传输图片到mysql_php – Android应用程序将图像发送到MySQL

    我有一个 Android应用程序,它将图像发送到我的数据库; public class NewProductActivity extends Activity { // Progress Dialog ...

  7. win10 android 登录,Microsoft现在允许您在Win10中运行Android应用程序

    8月7日消息:昨天,微软宣布了一项新功能,允许Win10用户在Windows 10中直接启动Android应用程序. 只有在选择三星Galaxy设备并允许Android将应用程序流到Windows 1 ...

  8. Android应用程序的调试

    adb   devices 这条命令用于列出当前adb服务器所能检测到的所有模拟器和手机.这也是快速获取模拟器或者手机TCP/IP通信端口的一个方法.如果当前系统中只连接了一个模拟器或手机,那么其他所 ...

  9. Android应用程序进程启动过程的源代码分析(1)

    Android应用程序框架层创建的应用程序进程具有两个特点,一是进程的入口函数是ActivityThread.main,二是进程天然支持Binder进程间通信机制:这两个特点都是在进程的初始化过程中实 ...

  10. Android应用程序窗口(Activity)的测量(Measure)、布局(Layout)和绘制(Draw)过程分析(上)...

    在前面一篇文章中,我们分析了Android应用程序窗口的绘图表面的创建过程.Android应用程序窗口的绘图表面在创建完成之后,我们就可以从上到下地绘制它里面的各个视图了,即各个UI元素了.不过在绘制 ...

最新文章

  1. 荣耀鸿蒙os2.0报名入口,华为鸿蒙系统2.0在哪报名
  2. 芝麻HTTP:redis-py的安装
  3. SAP Spartacus 服务器端渲染单步调试步骤之一:应用程序准备工作
  4. ASP.NET Core 3.x - Endpoint Routing 路由体系的内部机制
  5. KeyMob具有手机广告优化的管理平台
  6. mysql-The-server-quit-without-updating-PID-file
  7. mysql查询当月数据_MySQL百万数据,你如何用分页来查询数据
  8. python标准库学习笔记
  9. 由过去的微软、苹果、IBM 看今天的阿里巴巴
  10. 无意间把你的个人资料当圣诞礼物,送给了网络犯罪份子吗?
  11. vscode安卓html扩展,vscode扩展信息.html
  12. [转载]MySQL数据库增长用户权限GRANT/INSERT INTO user VALUES/FLUSH
  13. RSA算法的Java实现
  14. web前端顶岗实习总结报告_web前端实习报告
  15. android phone驱动 华为,华为智能手机USB驱动
  16. 自我觉察的心理测试软件,认识自己、洞察人心,心理咨询师专用的自我觉察方法...
  17. 什么是云服务举例说明_云服务器与云服务有什么区别
  18. 拓途公众号数据分析工具梳理企业公众号要做的分析!
  19. 按关键字采集淘特商品列表API接口H5
  20. 华为2022数字芯片笔试题

热门文章

  1. 河北省职称计算机35题,河北省职称计算机考试真题选读.doc
  2. 电影网网站优化-系统优化篇
  3. 像用Oracle一样用openGauss - 云和恩墨开源项目compat-tools介绍
  4. 计算机网络 | 网络概述(什么是互联网 互联网结构)
  5. 奇艺网终于出来了,会成为中国的hulu嘛?
  6. 功夫是下在平时的 2020.12.20日记
  7. 大家一起共同学习吖,且行且珍惜
  8. 记录一次自己的奇葩数学学习-java中的atan2和Excel中的atan2 以及菜鸟和w3cshool的奇葩指导
  9. 未转变者服务器买车指令,未转变者服务器指令大全
  10. 投入产出综合平衡分析