`
dantily
  • 浏览: 7929 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

android应用处理过程简单理解

 
阅读更多

做了个应用,总结下对于android 应用的简单理解


从上图可以简单看出,主线程启动,这里把各种操作称为action,主要分为3部分:
ui(视图绘制)、event(事件处理)和other(数据或网络等处理)

1.当点击图标启动应用A时,系统有个luncher应用会根据A应用里AndroidManifest.xml中声明的<category android:name="android.intent.category.LAUNCHER" />
找到对应启动的activity:

<application
	 android:icon="@drawable/icon_luncher"
	 android:label="@string/app_name"
	 android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" >    
	<activity
	            android:label="@string/app_name"
	            android:name=".home.MainActivity"
	            android:exported="true" //设置此属性,允许外部应用发Intent跳转到此Activity;普通情况下,不需要次属性也可实现跳转,当次应用涉及到系统权限或签名后,跳转时需要设置被跳转的activity此属性
	            android:screenOrientation="landscape"
	            android:configChanges="orientation|keyboardHidden" //设置为横屏显示,不让屏幕切换为竖屏
	            android:launchMode="singleInstance">//单例模式,详情可以参考android的4种启动模式
	             <intent-filter>
	                <action android:name="android.intent.action.MAIN" />
	                <category android:name="android.intent.category.LAUNCHER" />
	            </intent-filter>
	            <intent-filter>
	                <action android:name="android.other.skip.action"/>
	                <action android:name="android.intent.action.VIEW" />
	                <category android:name="android.intent.category.DEFAULT" />
	            </intent-filter>
	              
	     </activity>
	 </application>


问题:

a.当在应用列表中没有找到刚安装的应用A时,可以查看着这个xml中有无设置这个图标android:icon="@drawable/app_store"和声明
<category android:name="android.intent.category.LAUNCHER" />

b.如果调试的话,可以用命令行启动这个activity:am start -n 包名/包名.activity名,如:com.aaa.bbb/com.aaa.bbb.MainActivity


2.启动Activity,首先到oncreate方法里,setContentView(R.layout.main)显示布局内容(这里的Activity的启动流程详情了解android生命周期)
这里,整个初始化Activity想来是初步完成了。
接下来,会在做一些控件的操作,这里操作归结到UI绘制里。如:

        TextView tv = new TextView(this);
	tv.setTextSize(24);
	tv.setText("UI绘制");
	tv.setOnFocusChangeListener(new OnFocusChangeListener() {
		 @Override
	     public void onFocusChange(View v, boolean hasFocus) {//事件处理
	         if (hasFocus) { 
	            new Thread(new Runnable(){//大数据处理
	                @Override
	                public void run(){
	                    //这里不能直接做Ui处理,如tv.setText("线程中处理数据")等操作
	                     //1.线程中更新ui可以用Handler直接post(Runnable)方法刷新
	                        new Handler().post(new Runnable(){
                            @Override
	                            public void run(){
	                                updateUI();  //这个自定义方法中可以做ui操作
	                            }                         
                        });    
	                    //2.用handler 发送消息
	                    //3.继承AsyncTask类更新ui    
	                }
	            }).start();
			 } else {
	            //TODO
	         }
	     }
	});




3.上面代码UI绘制、事件处理和数据处理都简单说明了一番。接下来就来简单理解下这3者关系:
a.初始化界面显示,UI绘制已自动完成
b.当用户操作按键(或触屏)时,对应的事件就会触发:按键(onKeyLisetner、onKeyDown(我用的最多就是这个了O(∩_∩)O~)...)、触摸(onTouchListener...)等
这些事件当中可以直接更新UI,如:tv.invalidate()。具体的一些事件处理,如控制焦点都可在这里实现。
c.tv的invalidate()调用后,会最后调用到TextView里onDraw()方法,这个真正来绘制内容的方法
d.处理大数据或网络数据时,一般另起线程。android中在非主线程里是不能够直接更新ui或做ui操作的。为此,adnroid提供消息机制,用Handler发送消息到Messager queue,消息队列会
自动通知主线程,主线程可以从中获取消息中的参数,来更新对应的UI组件,如下面一个例子:
声明Handler:

            Handler h=new Handler(new Callback() {
	    @Override
	    public boolean handleMessage(Message msg) {
	    Bundle data  = msg.getData();
		switch (msg.what) {
	    case 0x0: //network err
	        Toast.makeText(MainActivity.this,getString(R.string.init_notice), 3000).show();
	        index_layout.setBackgroundResource(Color.TRANSPARENT);
	        img_manager.requestFocus();
			break;
	        case 0x1:   //update
            showNoticeDialog();
			break;
	        default:
	        break;
	        }
	        return false;
	    }
	});


在之前的线程当中,

//2.用handler 发送消息
	h.senh.sendEmptyMessage(0x1);
	//或者
	/*Message msg = new Message();
	 msg.what = 0x0;
	 Bundle data= new Bundle();
	 data.putString("AAA", "BBB");
	 msg.setData(data);
	 h.sendMessage(msg);
	*/


当要在其他类当中用handler发消息,那就想办法把当前Activity中的h实例传过去。

这样最终更新UI都是在主线程里实现的。
分享到:
评论

相关推荐

    Android应用源码简单的NB微博项目源码

    在这个“Android应用源码简单的NB微博项目源码”中,我们可以深入学习和研究Android应用程序开发的相关知识。这个项目源码提供了一个基础的微博应用实例,它涵盖了Android开发中的多个核心概念和技术,对于初学者和...

    一个基本的示例Android应用程序,以非常简单的方式理解MVP.zip

    在Android应用开发中,Model-View-Presenter(MVP)是一种常见的设计模式,它有助于实现清晰的代码结构,提高代码可测试性,并降低耦合度。这个压缩包“Android-MVP-Architecture-master”提供了一个基础的Android ...

    android应用和web简单交互DEMO

    综上所述,这个DEMO涵盖了Android应用与Web服务器交互的基本流程和技术点,包括网络请求、数据格式、权限管理、异步处理以及错误处理等,是学习和实践Android网络编程的好例子。通过深入研究和理解这个DEMO,开发者...

    android应用程序小例子

    在Android应用程序开发中,我们经常会遇到各种各样的小例子,这些例子可以帮助开发者更好地理解和掌握Android SDK中的各种功能和API。本篇文章将详细探讨"android应用程序小例子"这一主题,涵盖从基础概念到实际应用...

    Android应用源码简单大气的观哦天气预报项目源码

    这个“Android应用源码简单大气的观哦天气预报项目源码”是一个面向初学者和中级开发者的学习资源,它提供了一个完整的安卓应用实例,用于展示如何实现一个天气预报应用。通过这个项目,我们可以深入理解Android应用...

    《Android Studio实战 快速 高效地构建Android应用》pdf 高清扫描版

    《Android Studio实战:快速高效地构建Android应用》是一本针对Android开发者的重要参考资料,它深入浅出地介绍了如何利用Android Studio这一强大的集成开发环境(IDE)来高效地构建Android应用程序。这本书的内容...

    Android一些应用demo

    在Android应用中,经常需要用户选择日期、时间或者从列表中选取特定项,PickView就是为了简化这一过程而设计的。它通常包含轮播选择、滑动选择等多种形式,提供自定义样式和回调接口,让开发者可以轻松地创建符合...

    android简单的应用程序管理器

    综上所述,"android简单的应用程序管理器"项目涉及了Android应用程序开发的多个核心方面,包括系统服务的使用、UI设计、权限管理以及异步处理等技术。开发者需要对Android系统架构和组件有深入理解,才能构建出这样...

    Android应用源码之简单的机票预订系统源码

    在本项目中,我们讨论的是一个基于Android平台的简单机票预订系统源码。这个系统能够帮助用户方便地查询航班信息,进行机票预订,...通过学习和理解这个源码,开发者可以提升在Android应用开发领域的技能和实践经验。

    android应用程序开发源码40例

    【标题】"Android应用程序开发源码40例"是一份包含多个实际项目源代码的集合,旨在帮助开发者深入了解Android应用的构建过程。这些源码涵盖了各种功能和应用场景,是学习和提升Android编程技能的理想资源。 【描述...

    android小项目之简单词典

    2. **活动(Activity)与生命周期**:在Android应用中,Activity作为用户交互的入口点。在这个词典项目中,至少有一个主活动负责处理用户的输入和显示结果。了解Activity的生命周期,如onCreate(), onStart(), ...

    《Android移动应用基础教程》(Android Studio)(第二版)源代码.zip

    通过这个源代码包,读者可以深入理解Android应用的构建过程,包括布局设计、活动管理、数据存储、网络通信等多个方面。 1. **布局设计**:Android应用的用户界面主要由XML文件定义,这些文件在`res/layout`目录下。...

    Android应用源码之简单的贪吃蛇源码.zip

    在本压缩包“Android应用源码...通过研究这个简单的贪吃蛇源码,开发者不仅可以学习到Android应用的基本开发流程,还能深入理解游戏开发的逻辑和技巧。对于希望提升Android编程技能的人来说,这是一个极好的实践案例。

    Android 移动应用开发技术.pdf

    理解Activity、Intent、BroadcastReceiver、Service和ContentProvider等核心组件的使用是开发Android应用的基础。 在编程过程中,调试是必不可少的环节。Android Studio内置了强大的调试工具,可以设置断点、查看...

    Android应用源码之植物大战僵尸(简单版).zip

    《Android应用源码解析:植物大战僵尸简单版》 在移动游戏领域,植物大战僵尸(Plants vs. Zombies)是一款备受欢迎的经典塔防游戏。现在,我们有机会通过Android应用源码来深入理解这款游戏的实现机制。这个源码是...

    Android应用源码之简单的海贼王连连看源码.zip

    本篇将通过对"Android应用源码之简单的海贼王连连看源码.zip"进行深度剖析,探讨Android应用开发中的关键技术和设计思路。 海贼王连连看是一款深受用户喜爱的休闲游戏,它基于经典的连连看玩法,结合了海贼王这一...

    Android应用源码简单的云词典

    【Android应用源码简单的云词典】是...通过对这个开源项目的深入学习,开发者可以掌握Android应用开发的基本流程,理解网络编程、数据库管理、UI设计以及事件处理等多个方面,为今后的Android开发工作打下坚实的基础。

    Android安卓应用市场app商店源码.zip

    这个源码集合对于那些希望自定义自己的应用商店或者对Android应用市场机制有深入理解的开发者来说,具有很高的价值。下面将详细阐述与这个主题相关的Android开发知识点: 1. **Android应用程序架构**:Android应用...

    自学android应用开发详细流程经验(第三版)

    自学Android应用开发是一个充满挑战和乐趣的过程,但同时也可能让人感到困惑和迷茫。为了帮助初学者更有效地掌握Android开发,以下是一份详细的学习路径和资源推荐。 首先,基础的Java语法是Android开发的基石。...

    Android应用源码之Android 自定义头部控件,简单易用.zip

    标题“Android应用源码之Android 自定义头部控件,简单易用.zip”提示我们,这个压缩包包含了一个关于Android自定义头部控件的源码示例,其特点是简单易用。下面我们将深入探讨这一主题。 首先,自定义头部控件通常...

Global site tag (gtag.js) - Google Analytics