15.3.6. FibActivity
15.3.6.FibActivity
FibActivity允许用户输入一个数字,分别运行四种算法计算这个值对应的菲波那契数,并将不同算法花费的时间输出,供我们比较。这个Activity需要调用到FibLib和linfib.so。
例 15.4. FibActivity.java
package com.marakana;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class Fibonacci extends Activity implements OnClickListener {
TextView textResult;
Button buttonGo;
EditText editInput;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Find UI views
editInput = (EditText) findViewById(R.id.editInput);
textResult = (TextView) findViewById(R.id.textResult);
buttonGo = (Button) findViewById(R.id.buttonGo);
buttonGo.setOnClickListener(this);
}
public void onClick(View view) {
int input = Integer.parseInt(editInput.getText().toString()); //
long start, stop;
long result;
String out = "";
// Dalvik - Recursive
start = System.currentTimeMillis(); //
result = FibLib.fibJ(input); //
stop = System.currentTimeMillis(); //
out += String.format("Dalvik recur sive: %d (%d msec)", result, stop
- start);
// Dalvik - Iterative
start = System.currentTimeMillis();
result = FibLib.fibJI(input); //
stop = System.currentTimeMillis();
out += String.format("\nDalvik iterative: %d (%d msec)", result, stop
- start);
// Native - Recursive
start = System.currentTimeMillis();
result = FibLib.fibN(input); //
stop = System.currentTimeMillis();
out += String.format("\nNative recursive: %d (%d msec)", result, stop
- start);
// Native - Iterative
start = System.currentTimeMillis();
result = FibLib.fibNI(input); //
stop = System.currentTimeMillis();
out += String.format("\nNative iterative: %d (%d msec)", result, stop
- start);
textResult.setText(out); //
}
}
- 将字符串转换为数字。
- 在计算前,记录当前时间。
- 通过FibLib的方法计算菲波那契数,这里调用的是 Java 递归版本。
- 将当前时间减去先前记录的时间,即可得到算法花费的时间,以毫秒为单位。
- 使用 Java 的迭代算法执行计算。
- 使用本地的递归算法。
- 最后是本地的迭代算法。
- 格式化输出并且打印在屏幕上,