当前位置: 编程技术>移动开发
本页文章导读:
▪Andriod是什么 Andriod是什么?
Andriod是什么?首先,就像Android开源和兼容性技术负责人Dan Morrill在Android开发手册兼容性部分所解释的,“Android并不是传统的Linux风格的一个规范或分发版本,也不是一系列.........
▪ 失去屏幕方向 得到屏幕方向
Configuration config = getResources().getConfiguration();
if (config.orientation == Configuration.ORIENTATION_LANDSCAPE){ //横屏,比如 480x320
}else if(config.orientation == C.........
▪ AsyncTask(另一篇引见asyncTask的文章 写的也很简洁易懂) AsyncTask(另一篇介绍asyncTask的文章 写的也很简洁易懂)
平时我们在开发Android程序时遇到较耗时任务的处理,如I/O访问的数据库操作、网络访问等情况时造成UI假死等问题,通过 AsyncTask可以.........
[1]Andriod是什么
来源: 互联网 发布时间: 2014-02-18
Andriod是什么?
Andriod是什么?
首先,就像Android开源和兼容性技术负责人Dan Morrill在Android开发手册兼容性部分所解释的,“Android并不是传统的Linux风格的一个规范或分发版本,也不是一系列可重用的组件集成,Android是一个用于连接设备的软件块。”
Linux:
所有东西的底层是一个稳定的保持更新的Linux内核(我现在用的Nexus手机所用的就是2.6.32版的内核),以及我们精心打造的能源管理组件;当然还有将它们整合至上层Linux代码的扩展和公共组件。
Dalvik:
Android另一个重要的部分,包括虚拟机和一组重要的运行环境。它的设计非常巧妙,是个很好的一个手机终端的底层应用。
代码如何生成?
Dalvik虚拟机只执行.dex的可执行文件。当Java程序通过编译,最后还需要通过SDK中的工具转化成.dex格式才能在虚拟机上执行。
我需要强调的是,Android应用本身就可视作可在平台上运行并调用APIs的代码,所以对代码如何生成不需特别看重。
特别的Apps:
在图中有些基于Dalvik虚拟机的Apps看起来像是Android的一部分,其实是由Google提供,这些应用包括Dialer、Contact、Calendar、Gmail和Chat等。它们中的绝大部分是开源并可复用的。只有少部分例外,比如Google Maps和Android Market.
开源那些事:
在下面的图中,绿色的大部分组件是基于Apache许可证开源,其余基于GPL、LGPL和BSD。
Android框架
在Android开发者网(developer.android.com)上已有不少篇幅来帮助你使用它,在此就不再累述。
标准库
在这里“标准”是指“开发者在开源环境中一般可以使用的”。
App里面是什么
一个Android App包含在一个我们称之为APK的压缩文件夹中,APK并没有什么可说的,需要注意的是Android Manifest——介于App和Android System的接口。
其他
大多数应用是基于Dalvik的,我指的是除了游戏之外的应用。游戏开发者通常希望用C/C++来编写,排斥使用虚拟机,所以他们可以通过Andriod NDK来开发。(编译/杨东杰)
原文:http://www.tbray.org/ongoing/When/201x/2010/11/14/What-Android-Is
Andriod是什么?
首先,就像Android开源和兼容性技术负责人Dan Morrill在Android开发手册兼容性部分所解释的,“Android并不是传统的Linux风格的一个规范或分发版本,也不是一系列可重用的组件集成,Android是一个用于连接设备的软件块。”
Linux:
所有东西的底层是一个稳定的保持更新的Linux内核(我现在用的Nexus手机所用的就是2.6.32版的内核),以及我们精心打造的能源管理组件;当然还有将它们整合至上层Linux代码的扩展和公共组件。
Dalvik:
Android另一个重要的部分,包括虚拟机和一组重要的运行环境。它的设计非常巧妙,是个很好的一个手机终端的底层应用。
代码如何生成?
Dalvik虚拟机只执行.dex的可执行文件。当Java程序通过编译,最后还需要通过SDK中的工具转化成.dex格式才能在虚拟机上执行。
我需要强调的是,Android应用本身就可视作可在平台上运行并调用APIs的代码,所以对代码如何生成不需特别看重。
特别的Apps:
在图中有些基于Dalvik虚拟机的Apps看起来像是Android的一部分,其实是由Google提供,这些应用包括Dialer、Contact、Calendar、Gmail和Chat等。它们中的绝大部分是开源并可复用的。只有少部分例外,比如Google Maps和Android Market.
开源那些事:
在下面的图中,绿色的大部分组件是基于Apache许可证开源,其余基于GPL、LGPL和BSD。
Android框架
在Android开发者网(developer.android.com)上已有不少篇幅来帮助你使用它,在此就不再累述。
标准库
在这里“标准”是指“开发者在开源环境中一般可以使用的”。
App里面是什么
一个Android App包含在一个我们称之为APK的压缩文件夹中,APK并没有什么可说的,需要注意的是Android Manifest——介于App和Android System的接口。
其他
大多数应用是基于Dalvik的,我指的是除了游戏之外的应用。游戏开发者通常希望用C/C++来编写,排斥使用虚拟机,所以他们可以通过Andriod NDK来开发。(编译/杨东杰)
原文:http://www.tbray.org/ongoing/When/201x/2010/11/14/What-Android-Is
[2] 失去屏幕方向
来源: 互联网 发布时间: 2014-02-18
得到屏幕方向
Configuration config = getResources().getConfiguration();
if (config.orientation == Configuration.ORIENTATION_LANDSCAPE){
//横屏,比如 480x320
}else if(config.orientation == Configuration.ORIENTATION_PORTRAIT){
//竖屏 ,标准模式 320x480
}else if(config.hardKeyboardHidden == Configuration.KEYBOARDHIDDEN_NO){
//横屏,物理键盘滑出了
}else if(config.hardKeyboardHidden == Configuration.KEYBOARDHIDDEN_YES){
//竖屏,键盘隐藏了
}
[3] AsyncTask(另一篇引见asyncTask的文章 写的也很简洁易懂)
来源: 互联网 发布时间: 2014-02-18
AsyncTask(另一篇介绍asyncTask的文章 写的也很简洁易懂)
平时我们在开发Android程序时遇到较耗时任务的处理,如I/O访问的数据库操作、网络访问等情况时造成UI假死等问题,通过 AsyncTask可以很好的解决这个问题,就今天以在Android中执行Downloader.downloadFile(url),可能会堵塞整个界面。显然这会影响用户体验,我们如何解决这个问题呢?
方法一、
创建一个新的线程执行我们的任务,使用Thread类,在 run(){}中写入任务代码,比如:
new Thread(new Runnable() {
public void run() {
Downloader.downloadFile(url);
}
}).start();
但使用Thread会产生一些意想不到的问题,需要程序员用更多的代码手动的维护它。
方法二: Android SDK为我们提供了一个后台任务的处理工具AsyncTask。AsyncTask就是一个封装过的后台任务类顾名思义就是异步任务,方便我们维护,Android开发网提示这样的好处可以解决一些线程安全问题,AsyncTask直接继承于Object类,位置为 android.os.AsyncTask。要使用AsyncTask工作我们要提供三个泛型参数,并重载四个方法(至少重载一个)。
三个泛型:
Param ,任务执行器需要的数据类型
Progress 后台计算中使用的进度单位数据类型
Result 后台计算返回结果的数据类型
有些参数是可以设置为不使用的,只要传递为Void型即可,比如AsyncTask
四个步骤:
onPreExecute(),执行预处理,它运行于UI线程,可以为后台任务做一些准备工作,比如绘制一个进度条控件。
doInBackground(Params...),后台进程执行的具体计算在这里实现,doInBackground(Params...)是AsyncTask的关键,此方法必须重载。在这个方法内可以使用 publishProgress(Progress...)改变当前的进度值。
onProgressUpdate(Progress...),运行于UI线程。如果在doInBackground(Params...)中使用了publishProgress(Progress...),就会触发这个方法。在这里可以对进度条控件根据进度值做出具体的响应。
onPostExecute(Result),运行于UI线程,可以对后台任务的结果做出处理,结果就是doInBackground(Params...)的返回值。此方法也要经常重载,如果Result为null表明后台任务没有完成(被取消或者出现异常)。
方法一、
创建一个新的线程执行我们的任务,使用Thread类,在 run(){}中写入任务代码,比如:
new Thread(new Runnable() {
public void run() {
Downloader.downloadFile(url);
}
}).start();
但使用Thread会产生一些意想不到的问题,需要程序员用更多的代码手动的维护它。
方法二: Android SDK为我们提供了一个后台任务的处理工具AsyncTask。AsyncTask就是一个封装过的后台任务类顾名思义就是异步任务,方便我们维护,Android开发网提示这样的好处可以解决一些线程安全问题,AsyncTask直接继承于Object类,位置为 android.os.AsyncTask。要使用AsyncTask工作我们要提供三个泛型参数,并重载四个方法(至少重载一个)。
三个泛型:
Param ,任务执行器需要的数据类型
Progress 后台计算中使用的进度单位数据类型
Result 后台计算返回结果的数据类型
有些参数是可以设置为不使用的,只要传递为Void型即可,比如AsyncTask
四个步骤:
onPreExecute(),执行预处理,它运行于UI线程,可以为后台任务做一些准备工作,比如绘制一个进度条控件。
doInBackground(Params...),后台进程执行的具体计算在这里实现,doInBackground(Params...)是AsyncTask的关键,此方法必须重载。在这个方法内可以使用 publishProgress(Progress...)改变当前的进度值。
onProgressUpdate(Progress...),运行于UI线程。如果在doInBackground(Params...)中使用了publishProgress(Progress...),就会触发这个方法。在这里可以对进度条控件根据进度值做出具体的响应。
onPostExecute(Result),运行于UI线程,可以对后台任务的结果做出处理,结果就是doInBackground(Params...)的返回值。此方法也要经常重载,如果Result为null表明后台任务没有完成(被取消或者出现异常)。
为了正确的使用AsyncTask类,以下是几条必须遵守的准则:
1) Task的实例必须在UI thread中创建
2) execute方法必须在UI thread中调用
3) 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)这几个方法
4) 该task只能被执行一次,否则多次调用时将会出现异常
1) Task的实例必须在UI thread中创建
2) execute方法必须在UI thread中调用
3) 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)这几个方法
4) 该task只能被执行一次,否则多次调用时将会出现异常
public class main extends Activity { ImageView imageView01; TextView textView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); textView = (TextView) this.findViewById(R.id.TextView01); imageView01 = (ImageView) this.findViewById(R.id.ImageView01); GetImage getImage = new GetImage(); getImage.execute("http://hi.csdn.net/attachment/201010/27/0_1288149117Yk8W.gif"); } private class GetImage extends AsyncTask { public GetImage() { super(); // TODO Auto-generated constructor stub } @Override protected void onCancelled() { Log.i("czb", "onCancelled is running..."); super.onCancelled(); } @Override protected void onPostExecute(Object result) { /* * 此方法在主线程执行,任务执行的结果作为此方法的参数返回 */ Log.i("czb", "onPostExecute is running..."); Log.i("czb", "result == null ? " + (result == null)); imageView01.setImageBitmap((Bitmap)result); super.onPostExecute(result); } @Override protected void onPreExecute() { /* * 执行预处理,它运行于UI线程,可以为后台任务做一些准备工作,比如绘制一个进度条控件 */ Log.i("czb", "onPreExecute is running..."); super.onPreExecute(); } @Override protected void onProgressUpdate(Object... values) { /* * 此方法在主线程执行,用于显示任务执行的进度。 */ Log.i("czb", "onProgressUpdate is running..."); // 由publishProgress传递的值 Log.i("czb", "values " + values[0]); super.onProgressUpdate(values); } @Override protected Object doInBackground(Object... params) { /* * 此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。 * 在执行过程中可以调用publicProgress(Progress…)来更新任务的进度。 */ Log.i("czb", "doInBackground is running..."); try { Bitmap bitmap; HttpClient client = new DefaultHttpClient(); // params[0]代表连接的url URI uri = URI.create((String) params[0]); HttpGet get = new HttpGet(uri); HttpResponse response = client.execute(get); HttpEntity entity = response.getEntity(); long length = entity.getContentLength(); Log.i("czb", " " + length); InputStream in = entity.getContent(); if (in != null) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); /*byte[] buf = new byte[128]; int ch = -1; int count = 0; while ((ch = in.read(buf)) != -1) { baos.write(buf, 0, ch); count += ch; if (length > 0) { // 如果知道响应的长度,调用publishProgress()更新进度 // onProgressUpdate读取进度 publishProgress((int) ((count / (float) length) * 100)); } // 为了在模拟器中清楚地看到进度,让线程休眠100ms //Thread.sleep(100); }*/ bitmap = BitmapFactory.decodeStream(in); in.close(); baos.close(); return bitmap; } } catch (Exception e) { e.printStackTrace(); } return null; } } }
- 大小: 36 KB
- 大小: 36 KB
最新技术文章: