当前位置:  编程技术>移动开发
本页文章导读:
    ▪apk生成odex,拔高程序的运行效率        apk生成odex,提高程序的运行效率 编译源码out下面(/mydroid/out/target/product/generic/symbols/system/bin)的dexopt-wrapper拷到手机adb push ./dexopt-wrapper  /data/localadb shellcd /data/local./dexopt-wrapper  sim.apk sim..........
    ▪ 兑现阳光卡充值对话框        实现阳光卡充值对话框   点击“充值”打开“阳光卡充值”对话框,在对话框中输入充值金额,然后点击“确定”,显示“请等待”进度条。 在显示进度条的后面,创建一个线程来处理请求.........
    ▪ ARM3级流水线跟中断返回地址地址       ARM3级流水线和中断返回地址地址     ARM处理器使用流水线来增加处理器指令流的速度,这样可使几个操作同时进行,并使处理与存储器系统之间的操作更加流畅,连续,能提供0.9MIPS/MHZ的指.........

[1]apk生成odex,拔高程序的运行效率
    来源: 互联网  发布时间: 2014-02-18
apk生成odex,提高程序的运行效率
编译源码out下面(/mydroid/out/target/product/generic/symbols/system/bin)的dexopt-wrapper拷到手机
adb push ./dexopt-wrapper  /data/local
adb shell
cd /data/local
./dexopt-wrapper  sim.apk sim.odex

补充:
1:dexopt-wrapper 是生成odex的工具,我是repo下载android 2.1源码,然后编译后得到的
2:mydroid是放源码的目录,编译成功后就会有以上路径了
3:odex的作用是优化后的dex 文件,可以提高加载速度,但具体多少没有测试,我原来只是想修改android联系人源码(改改他的中文排序和查找功能),
   发现很多系统程序有个odex文件,所以才找这个生成odex的方法,但有个缺点,生成的odex文件比较大,可能是没压缩的原故
4:adb push  把dexopt-wrapper文件拷贝到/data/local
5:adb shell 是从电脑进入android linux shell 状态,最后两行是linux 命令

    
[2] 兑现阳光卡充值对话框
    来源: 互联网  发布时间: 2014-02-18
实现阳光卡充值对话框

 

点击“充值”打开“阳光卡充值”对话框,在对话框中输入充值金额,然后点击“确定”,显示“请等待”进度条。

在显示进度条的后面,创建一个线程来处理请求,当处理完毕时,不显示进度条,同时显示Toast提示充值成功。

在新建的线程里要调整UI的显示,必须通过发送请求给Handler实现。

private void credit() {
	LayoutInflater factory = LayoutInflater.from(this);
	// 得到自定义对话框
	final View DialogView = factory.inflate(R.layout.ebcredit, null);
	// 创建对话框
	AlertDialog creditDialog = new AlertDialog.Builder(this)
			.setTitle("阳光卡充值").setView(DialogView)// 设置自定义对话框的样式
			.setPositiveButton("确定", // 设置"确定"按钮
					new DialogInterface.OnClickListener(){ // 设置事件监听
						public void onClick(DialogInterface dialog,
								int whichButton) {
							//final String amount = mEditTextCredit.getText().toString();
							// 输入完成后,点击“确定”开始充值
							mProgressDialog = ProgressDialog.show(
									EBActivity.this, "请等待...", "正在充值...",
									true);
							new Thread() {
								public void run() {
									try {
										sleep(3000);
									} catch (Exception e) {
										Log.e(LOG_TAG, "阳光卡充值出错", e);
									} finally {
										// 充值结束,取消mProgressDialog对话框
										mProgressDialog.dismiss();
										Message msg = new Message();
										msg.what = WHAT_CREDIT;
										try{
											Bundle data = new Bundle();
											//data.putString("amount", amount);
											msg.setData(data);
											handler.sendMessage(msg);
										}catch(Exception ex){
											Log.e(LOG_TAG, "充值出现问题", ex);
										}
									}
								}
							}.start();
						}
					}).setNegativeButton("取消", // 设置“取消”按钮
					new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog,
								int whichButton) {
							// 什么都不做,点击时对话框就会关闭
						}
					}).create();// 创建
	creditDialog.show();
}

 

private final Handler handler = new Handler(){
	@Override
	public void handleMessage(Message msg) {
		Bundle data = msg.getData();
		if(msg.what==WHAT_CREDIT){
			//mBalance.setText("200.50");
			try{
				double curBalance = Integer.parseInt(mBalance.getText().toString());
				double amount = Double.parseDouble(data.getString("amount"));
				double balance = curBalance + amount;
				mBalance.setText(String.valueOf(balance));
				DisplayToast("充值成功");
			}catch(Exception ex){
				Log.e(LOG_TAG, "充值出现错误", ex);
			}
		}
	}
};

 

public void DisplayToast(String str)
{
	Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
}

 


    
[3] ARM3级流水线跟中断返回地址地址
    来源: 互联网  发布时间: 2014-02-18
ARM3级流水线和中断返回地址地址

    ARM处理器使用流水线来增加处理器指令流的速度,这样可使几个操作同时进行,并使处理与存储器系统之间的操作更加流畅,连续,能提供0.9MIPS/MHZ的指令执行速度
    PC代表程序计数器,流水线使用三个阶段,因此指令分为三个阶段执行:1、取指(从存储器装载一条指令);2、译码(识别将要被执行的指令,得到下一指令占据数据路径,寄存器被读取,操作数在桶式移位器中被以为。ALU产生相应的运算结果并写回到目的寄存器中,ALU结果根据指令需求更改状态寄存器的条件位)。而R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指令。一般来说,人们习惯性约定将“正在执行的指令作为参考点”,称之为当前指令第一条指令,因此PC总是指向第三条指令。当ARM状态时,每条指令4字节长,所以PC始终指向该指令地址加8字节的地址,即:PC值=当前程序执行位置+8;详细分解:
    第一周期对第一指令进行取指操作。
    第二周期对第一指令进行译码,同时对第二指令进行取指操作。
    第三周期对第一指令进行执行,第二指令进行译码,并同时对第三条指令执行操作

 

 地址         指令
0x3000      A
0x3004      B
0x3008      C
0x300c       D
(1)SWI和未定义指令异常
此时正在执行指令A(此时PC=0x3008)的同时在译码阶段发生SWI或未定义指令异常,等指令A执行完后(此时PC还没有发生改变PC=0x3008)进行SWI或未定义指令粗合理,同时把当前PC值赋给寄存器LR(LR=0x3008)然后再进行自动调整LR=LR-0x04(此时LR=0x3004),这样当异常返回时就到地址为0x3004的指令处执行。所以再进入异常的时候LR不需要修改
(2)IRQ和FIQ异常
此时正在执行指令A(此时PC=0x3008)的同时发生IRQ和FIQ异常,等指令A执行完后(此时PC发生改变PC=0x300c)进行IRQ和FIQ异常响应,同时把当前PC值赋给寄存器LR(LR=0x300c)然后再进行自动调整LR=LR-0x04(此时LR=0x3008),这样当异常返回时就到地址为0x3008的指令C处执行(可以看出跳过了执行指令B),所以当进入异常的时候要执行“SUB LR,LR,#4”(此时LR=0x3004),当异常返回时就到地址为0x3004的指令B处执行。
(3)预取指令中止
此时正在执行指令A(此时PC=0x3008)发生预取指令中止异常,(此时PC没有发生改变PC=0x3008)进入预取指令中止异常响应,同时把当前PC值赋给寄存器LR(LR=0x3008)然后再进行自动调整LR=LR-0x04(此时LR=0x3004),这样当异常返回时就到地址为0x3004的指令B处执行,但是当发生指令预取中止异常时,程序要返回到该有问题的指令处,重新读取并执行该指令。异常指令预取中止异常中断程序应该返回到产生该指令预取中止异常中断的指令处。所以当进入异常的时候要执行“SUB LR,LR,#4”(此时LR=0x3000),当异常返回时就到地址为0x3000的指令A处重新执行
(4)数据中止异常
此时正在执行指令A(此时PC=0x3008)的同时发生数据中止异常,等指令A执行完后进入下一条指令时(此时PC发生改变PC=0x300c)发生数据中止异常响应,同时把当前PC值赋给寄存器LR(LR=0x300c)然后再进行自动调整LR=LR-0x04(此时LR=0x3008),这样当异常返回时就到地址为0x3008的指令c处执行,但是发生数据访问中止异常中断时,程序要返回到该有问题的数据访问处,重新访问该数据。因此数据访问中止异常中断程序应该返回到产生该数据访问中止异常中断的指令处所以当进入异常的时候要执行“SUB LR,LR,#8”(此时LR=0x3000),当异常返回时就到地址为0x3000的指令A处重新执行

 

异常或入口

返回指令

之前的状态

ARM R14_x Thumb R14_x

备注

BL

MOV PC,R14

PC+4

PC+2

此处PC 为BL, SWI, 未定义的指令取指或者预取中止指令的地址。

SWI

MOVS PC,R14_svc

PC+4

PC+2

未定义的指令

MOVS PC,R14_und

PC+4

PC+2

预取中止

SUBS PC,R14_abt,#4

PC+4

PC+4

快中断

SUBS PC,R14_fiq,#4

PC+4

PC+4

此处PC 为由于FIQ 或IRQ 占先而没有被执行的指令的地址

中断

SUBS PC,R14_irq,#4

PC+4

PC+4

数据中止

SUBS PC,R14_abt,#8

PC+8

PC+8

此处PC 为产生数据中止的装载或保存指令的地址。

复位

复位时保存在R14_svc 中的值不可预知。

 

 


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪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