做了个应用,总结下对于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应用程序开发的相关知识。这个项目源码提供了一个基础的微博应用实例,它涵盖了Android开发中的多个核心概念和技术,对于初学者和...
在Android应用开发中,Model-View-Presenter(MVP)是一种常见的设计模式,它有助于实现清晰的代码结构,提高代码可测试性,并降低耦合度。这个压缩包“Android-MVP-Architecture-master”提供了一个基础的Android ...
综上所述,这个DEMO涵盖了Android应用与Web服务器交互的基本流程和技术点,包括网络请求、数据格式、权限管理、异步处理以及错误处理等,是学习和实践Android网络编程的好例子。通过深入研究和理解这个DEMO,开发者...
在Android应用程序开发中,我们经常会遇到各种各样的小例子,这些例子可以帮助开发者更好地理解和掌握Android SDK中的各种功能和API。本篇文章将详细探讨"android应用程序小例子"这一主题,涵盖从基础概念到实际应用...
这个“Android应用源码简单大气的观哦天气预报项目源码”是一个面向初学者和中级开发者的学习资源,它提供了一个完整的安卓应用实例,用于展示如何实现一个天气预报应用。通过这个项目,我们可以深入理解Android应用...
《Android Studio实战:快速高效地构建Android应用》是一本针对Android开发者的重要参考资料,它深入浅出地介绍了如何利用Android Studio这一强大的集成开发环境(IDE)来高效地构建Android应用程序。这本书的内容...
在Android应用中,经常需要用户选择日期、时间或者从列表中选取特定项,PickView就是为了简化这一过程而设计的。它通常包含轮播选择、滑动选择等多种形式,提供自定义样式和回调接口,让开发者可以轻松地创建符合...
综上所述,"android简单的应用程序管理器"项目涉及了Android应用程序开发的多个核心方面,包括系统服务的使用、UI设计、权限管理以及异步处理等技术。开发者需要对Android系统架构和组件有深入理解,才能构建出这样...
在本项目中,我们讨论的是一个基于Android平台的简单机票预订系统源码。这个系统能够帮助用户方便地查询航班信息,进行机票预订,...通过学习和理解这个源码,开发者可以提升在Android应用开发领域的技能和实践经验。
【标题】"Android应用程序开发源码40例"是一份包含多个实际项目源代码的集合,旨在帮助开发者深入了解Android应用的构建过程。这些源码涵盖了各种功能和应用场景,是学习和提升Android编程技能的理想资源。 【描述...
2. **活动(Activity)与生命周期**:在Android应用中,Activity作为用户交互的入口点。在这个词典项目中,至少有一个主活动负责处理用户的输入和显示结果。了解Activity的生命周期,如onCreate(), onStart(), ...
通过这个源代码包,读者可以深入理解Android应用的构建过程,包括布局设计、活动管理、数据存储、网络通信等多个方面。 1. **布局设计**:Android应用的用户界面主要由XML文件定义,这些文件在`res/layout`目录下。...
在本压缩包“Android应用源码...通过研究这个简单的贪吃蛇源码,开发者不仅可以学习到Android应用的基本开发流程,还能深入理解游戏开发的逻辑和技巧。对于希望提升Android编程技能的人来说,这是一个极好的实践案例。
理解Activity、Intent、BroadcastReceiver、Service和ContentProvider等核心组件的使用是开发Android应用的基础。 在编程过程中,调试是必不可少的环节。Android Studio内置了强大的调试工具,可以设置断点、查看...
《Android应用源码解析:植物大战僵尸简单版》 在移动游戏领域,植物大战僵尸(Plants vs. Zombies)是一款备受欢迎的经典塔防游戏。现在,我们有机会通过Android应用源码来深入理解这款游戏的实现机制。这个源码是...
本篇将通过对"Android应用源码之简单的海贼王连连看源码.zip"进行深度剖析,探讨Android应用开发中的关键技术和设计思路。 海贼王连连看是一款深受用户喜爱的休闲游戏,它基于经典的连连看玩法,结合了海贼王这一...
【Android应用源码简单的云词典】是...通过对这个开源项目的深入学习,开发者可以掌握Android应用开发的基本流程,理解网络编程、数据库管理、UI设计以及事件处理等多个方面,为今后的Android开发工作打下坚实的基础。
这个源码集合对于那些希望自定义自己的应用商店或者对Android应用市场机制有深入理解的开发者来说,具有很高的价值。下面将详细阐述与这个主题相关的Android开发知识点: 1. **Android应用程序架构**:Android应用...
自学Android应用开发是一个充满挑战和乐趣的过程,但同时也可能让人感到困惑和迷茫。为了帮助初学者更有效地掌握Android开发,以下是一份详细的学习路径和资源推荐。 首先,基础的Java语法是Android开发的基石。...
标题“Android应用源码之Android 自定义头部控件,简单易用.zip”提示我们,这个压缩包包含了一个关于Android自定义头部控件的源码示例,其特点是简单易用。下面我们将深入探讨这一主题。 首先,自定义头部控件通常...