`

Android开发入门介绍

 
阅读更多

一、app的运行方式

    操作系统会给每一个andorid应用程序(App)分配一个唯一userId。所以每一个App都是以一个独立的用户运行在android操作系统之上。

二、app的framework组成

 

    android的App框架主要包含三大核心组件Activity、Service、BroadcastReceiver和一个重要消息承载组件Intent。

1)Activity

    Activity是一个掌控与UI交互的一个组件。负责加载UI的layout,并注册UI上的可视化组件的监听器(比如一个button的click事件的监听处理器)。使用activity需要关注他的生命周期不同阶段所调用的方法,这些方法和对应的activity状态关系可以参考下图。



 更多详情参阅这里

2)Service

    Service是提供后台逻辑处理的组件,不与UI进行绑定,用来在后台处理耗时较长的任务(注意需要另起线程处理,因为service仍然是在他的host线程运行的)。

    该组件有两种使用方式:

    a)startService():某一组件调用startService()来启动service,启动后即使负责启动的组件已经失效(destoryed)该service仍然可以存在并并运行。

    b)bindService():一般情况下是用activity绑定一个service,这样activity和service可以一起交互协作。当绑定在service上的所有组件都unbund之后,该service才会被销毁。

生命周期和相关的调用方法如下图所示:


更多详情参考这里

3)broadcastReceiver 

    BroadcastReceiver是为了实现系统广播而提供的一种组件。比如,我们可以发出一种广播来测试手机wifi信号连接的变化,这时候就可以定义一个BraodcastReceiver来接受广播,当wifi连接上internet时可以提示用户可以更新一写软件。我们可以用Intent配合sendBroadcast()方法发起一个系统级别的事件广播来传递消息。当然我们也可以在自己的应用程序中实现BroadcastReceiver来监听和响应广播的Intent。broadcastReceiver的生命周期非常短暂,仅用户持续与onReceive()方法,而且该方法一般情况下不能够长时间的执行,而且在该方法中启动的thread会在该方法返回后销毁,所以一般在这里启动service来处理消息。

更多信息参考这里

4)intent

    Intent对象就是一个信息包(bundle),他主要包含接受处理该intent的组件关心的信息数据和android系统关心的信息数据。

更多信息参考这里

三、一个helloworld的实例

    根据以上三个核心组件和信息承载组件Intent的知识,我们做一个负责一点的helloworld的例子来练下手。大家先参考google等在本地安装起来一个环节,并创建一个初步的helloworld的例子。一般的网上找的这个例子只是一个初步的包含了activity组件的例子。我带着大家一起改造下这个项目,将三大核心组件都加入进来(其实app框架是有四大重要组件的,除了我们提到的三大核心组件还有另外一个contentprovider暂时先不讲)。

0)App项目程序结构和App demo逻辑

大家根据google来的信息肯定已经先搭起来了一个只包含了activity的例子。先简单的介绍下这个项目的程序代码结构,如下图。



 

为了练手3大核心组件,我们设计一个简单的场景,用户在界面上输入一个字符串,然后点击一个广播的按钮,通过该按钮触发一个系统广播(即发送一个自定义的广播信息,在Activity中绑定具体UI组件的事件监听器),然后我们再顶一个广播信息的接受者来处理这个消息(BroadcastReceiver),具体的处理触发动作我们放到一个service中在后台处理,具体的处理逻辑是在屏幕上显示一下这个输入信息,并且渐隐。

 2)下面是具体的实现逻辑代码的核心部分。请参考。

andoridmanifest.xml文件,这里配置了整个app组件信息

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myfirstapp"
    android:versionCode="1"
    android:versionName="1.0" >

    <!-- 指定适用的sdk信息 -->
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    <!-- 应用组件的配置,主要配置activity、service、broadcastReceiver 、contentProvider -->
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <!-- 配置启动要使用的主Activity -->
        <activity
            android:name="com.example.myfirstapp.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
		<!-- 配置系统消息的接收器 -->
        <receiver android:name="MyReceiver" >
            <intent-filter>
                <!-- 指定接受消息的action名称-->
                <action android:name="com.example.action.MyAction" />
            </intent-filter>
        </receiver>
		<!-- 配置我们的消息处理服务 -->
        <service
            android:name="MyService"
            android:exported="true" >
            <intent-filter>
                <action android:name="android.intent.action.ACTION_SCREEN_ON" />
            </intent-filter>
        </service>
    </application>

</manifest>
 /res/layout/layout_main.xml配置了我们的交互UI的组件,虽然此处很简单只有2个按钮和2个textview但是我们后台的逻辑都是通过这里触发的。

 

 

<LinearLayout 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"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

    <Button
        android:id="@+id/button1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="32dp"
        android:text="@string/button1" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="text" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/button2" />

</LinearLayout>
 com.example.myfirstapp.MainActivity.java文件,我们的系统中的Activity,修改后代码如下。

 

 

//activity需要继承android.app.Activity
public class MainActivity extends Activity {
	private Boolean clickSign = false;
	private final static String MY_ACTION = "com.example.action.MyAction";
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//装载UI的Layout
		setContentView(R.layout.activity_main);
		//获取页面各组件
		final TextView hello = (TextView) this.findViewById(R.id.textView1);
		final TextView info = (TextView)this.findViewById(R.id.editText1);
		Button button = (Button) this.findViewById(R.id.button1);
		Button broadcastBtn = (Button)this.findViewById(R.id.button2);
		//绑定页面按钮的click事件监听器
		button.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				if(!clickSign){
					hello.setText(R.string.tttttt);
				}else{
					hello.setText(R.string.hello_world);
				}
				clickSign = !clickSign;
			}
			
		});
		//点击该按钮后将会发送系统消息
		broadcastBtn.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				CharSequence infoText = info.getText();
				Intent intent = new Intent();
				intent.setAction(MY_ACTION);
				intent.putExtra("msg", "your input info:"+infoText);
				sendBroadcast(intent);
			}});
	}

}
 com.example.myfirstapp.MyReceiver我们的定义Receiver。

 

//系统消息接收器,可以跨系统接受消息,需要继承自android.content.BroadcastReceiver
public class MyReceiver extends BroadcastReceiver {  
  
    @Override  
    public void onReceive(Context context, Intent intent) {  
    	
        String msg=intent.getStringExtra("msg");  
        //构造启动消息处理服务的intent
        Intent serviceIntent=new Intent(context, MyService.class);
        serviceIntent.putExtra("msg", msg);
        //启动服务
		context.startService(serviceIntent);
    }  
      
}  

 com.example.myfirstapp.MyService定义service,具体信息可以参照下面的代码和注释

//service 需要继承android.app.Service
public class MyService extends Service {
	
	@Override
	public IBinder onBind(Intent intent) {
		//Unbund Service 此处可以返回空
		return null;
	}

	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		int result = super.onStartCommand(intent, flags, startId);
		//拿到消息数据并展示,如果此处消息的处理比较耗时可以启动线程进行处理
		String msg = intent.getStringExtra("msg");
		Toast.makeText(this, "msg received in service.msg is---"+msg, Toast.LENGTH_LONG).show();
		return result;
	}

}

 

 

 

  • 大小: 80.7 KB
  • 大小: 73.3 KB
  • 大小: 95.7 KB
分享到:
评论

相关推荐

    AndroidAPP开发入门教程.pdf

    Android APP 开发入门教程主要介绍了 Android APP 的开发流程,从 SDK 下载、开发环境搭建、代码编写、APP 打包等步骤一一讲解。本教程通过实践操作,带领读者一步步完成 Android APP 的开发,帮助读者快速掌握 ...

    Android开发入门60个小案例+源代码

    在Android开发领域,初学者经常会面临许多挑战,如理解Android应用程序的基本架构、学习XML布局、掌握Java或Kotlin编程语言,以及如何与设备硬件交互等。"Android开发入门60个小案例+源代码"这个资源提供了丰富的...

    android开发入门 ppt

    android开发入门 ppt 对android进行比较详细的行业介绍

    Android开发入门与实战 第二版 源码 最新更新

    《Android开发入门与实战 第二版》是一本专为初学者设计的Android编程书籍,旨在帮助读者快速掌握Android应用开发的基础知识和实践技巧。书中涵盖了从安装开发环境到创建完整应用的全过程,提供了丰富的实例和源码,...

    android开发入门与实践体验-光盘代码

    在Android开发领域,入门与实践是提升技能的关键步骤。"Android开发入门与...以上知识点覆盖了"Android开发入门与实践体验"的主要内容,通过实际操作"光盘代码"中的示例,开发者能够逐步建立扎实的Android开发基础。

    Google Android开发入门与实战.(配书源码)

    在Android开发领域,Google Android开发入门与实战是一本颇受欢迎的书籍,旨在引导初学者进入Android应用开发的世界。这本书由靳岩和姚尚朗合著,由人民邮电出版社出版,提供了丰富的实例和源代码来辅助学习。由于...

    Android开发从入门到精通【视频教程+课程源码】.rar

    在Android开发领域,掌握基础知识是至关重要的,而这套"Android开发从入门到精通【视频教程+课程源码】"提供了一条系统学习的路径。它不仅包括了详细的视频讲解,还有配套的源代码,旨在帮助初学者从零开始,逐步...

    Android开发入门经典

    此外,还要求搭建Android开发环境,编写并分析“HelloWorld”应用程序,这是学习任何编程语言和平台的通用入门练习。 在“第二部分 Android应用核心基础知识”中,涉及的内容包括Android开发的核心组件,即Activity...

    Android开发入门教程.pdf

    Android 开发入门教程是 Android 应用程序开发的入门指南,本文档主要介绍 Android 开发环境的配置、SDK 的安装和 Eclipse 插件的安装等基本知识。 安装 SDK 要开始 Android 应用程序的开发,首先需要安装 ...

    android游戏开发入门

    总之,Android游戏开发入门涉及众多方面,从环境配置到游戏设计,再到性能优化和网络通信,每一步都需要扎实的学习和实践。通过不断学习和项目实践,你将能够掌握开发出吸引人的Android游戏所需的知识和技能。在jb51...

    Android开发从入门到精通_android_

    在学习Android开发的过程中,Android Studio是官方推荐的集成开发环境(IDE),它提供了丰富的功能,使得开发、调试和发布Android应用程序变得更加便捷。 首先,我们需要了解Android的基础知识,包括Android系统的...

    Android开发从入门到精通

    书号:ISBN:9787894300874 Android开发从入门到精通

    android开发入门教程

    第2章 工欲善其事 必先利其器——搭建Android开发环境 2.1 开发Android应用前的准备 2.1.1 Android开发系统要求 2.1.2 Android软件开发包 2.1.3 其他注意事项 2.2 Windows开发环境搭建 2.2.1 JDK、Eclipse、Android...

    Google Android开发入门与实战(pdf和源代码)

    总之,《Google Android开发入门与实战》是一本全面覆盖Android开发基础知识和实战技巧的教程,无论你是编程新手还是希望转行到Android开发的从业者,都能从中受益匪浅。通过深入学习和实践,你将具备开发高质量...

    Google Android开发入门指南

    ### Google Android开发入门指南 #### 一、简介 ...通过遵循上述指南,您将能够成功搭建Android开发环境,并开始创建自己的Android应用程序。随着实践的深入,您将会更加熟练地掌握Android应用开发的核心技术。

    Google Android 开发入门指南(第二版).pdf

    本书主要介绍了Android 2.x版本的应用开发技术,适合初学者快速入门Android开发,并逐步进阶至高级主题。内容涵盖Android平台的基本概念、应用设计原理以及具体的开发技巧。 #### 三、核心知识点详解 ##### 1. ...

    Android平台Qt开发入门教程.pdf

    Qt是一种跨平台的应用程序开发框架,可以在多种操作系统上运行,包括Windows、Linux、Mac OS X等。 在Android平台上开发Qt应用程序需要使用Android NDK(Native Development Kit),它提供了编译和调试Android ...

    【android开发】Android APP开发入门教程Android APP开发入门教程

    【android开发】Android APP开发入门教程Android APP开发入门教程 说明:Android APP开发入门教程Android APP开发入门教程 (Android APP Development tutorialAndroid APP Development tutorial) 文件列表: Android ...

Global site tag (gtag.js) - Google Analytics