当前位置:  编程技术>移动开发
本页文章导读:
    ▪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

    
[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表明后台任务没有完成(被取消或者出现异常)。
为了正确的使用AsyncTask类,以下是几条必须遵守的准则:
  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

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
编程语言 iis7站长之家
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3