Android NDK入门实例 计算斐波那契数列三在Android中调用本地库文件
2013-07-13 17:20
411 查看
上一篇生成了本地共享库文件,这一篇主要介绍如何在Android中调用本地代码。同时测试Android应用程序。改程序功能:输入一个数,分别运行4中算法计算出这个只对应的斐波那契数,同时将不同算法话费的时间显示出来。
一、编写FibLib.java和MainActivity.java
FibLib.java:
MainActivity.java:
代码功能就是输入一个数,,分别运行4中算法计算出这个只对应的斐波那契数,同时将不同算法话费的时间显示出来。有注释,不清楚地方可以一起讨论。
二、编写主窗口布局文件activity_main.xml
这个我是在不局窗口拖得,然后自动生成的代码。
三、测试代码
编译OK后右击工程Run As/Android Application,运行结果如下:
输入30,可以看到本地运行速度快多了。由于计算是在Activity主UI线程中进行的,期间会影响到界面的响应,如果响应时间过长,就会出现程序无响应。建议输入数在25~30之间,效果比较明显。
一、编写FibLib.java和MainActivity.java
FibLib.java:
package com.example.fiblib; public class FibLib { //java的递归实现 public static long fibJ(long n){ if(n <= 0) return 0; if(n==1) return 1; return fibJ(n-1) + fibJ(n-2); } //java的迭代实现 public static long fibJI(long n){ long previous = -1; long result = 1; for(long i=0;i<=n;i++){ long sum=result+previous; previous = result; result = sum; } return result; } //本地实现 static { System.loadLibrary("fib"); } public static native void fibN(int n[]); //本地的递归实现 public static native long fibNI(int n); //本地的迭代实现 }
MainActivity.java:
package com.example.fiblib; import android.os.Bundle; import android.app.Activity; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; //import android.view.Menu; public class MainActivity extends Activity implements OnClickListener{ TextView textResult; Button buttonGo; EditText editInput; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取对UI view的引用 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 递归 start = System.currentTimeMillis(); result = FibLib.fibJ(input); stop = System.currentTimeMillis(); out += String.format("Dalvik recursive: %d (%d msec)",result, stop - start); //Dalvik 迭代 start = System.currentTimeMillis(); result = FibLib.fibJI(input); stop = System.currentTimeMillis(); out += String.format("\nDalvik iterative %d (%d msec)",result, stop - start); //本地 递归 start = System.currentTimeMillis(); result = FibLib.fibN(input); stop = System.currentTimeMillis(); out += String.format("\nNative recursive: %d (%d msec)",result, stop - start); //本地 迭代 start = System.currentTimeMillis(); result = FibLib.fibNI(input); stop = System.currentTimeMillis(); out += String.format("\nNative iterative: %d (%d msec)",result, stop - start); textResult.setText(out); } /* @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } */ }
代码功能就是输入一个数,,分别运行4中算法计算出这个只对应的斐波那契数,同时将不同算法话费的时间显示出来。有注释,不清楚地方可以一起讨论。
二、编写主窗口布局文件activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <EditText android:id="@+id/editInput" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0.38" android:text="input" /> <Button android:id="@+id/buttonGo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0.68" android:text="Go" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > </LinearLayout> <TextView android:id="@+id/textResult" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/linearLayout1" android:layout_alignRight="@+id/linearLayout1" android:layout_below="@+id/linearLayout1" android:layout_marginTop="15dp" android:text="result" /> </RelativeLayout>
这个我是在不局窗口拖得,然后自动生成的代码。
三、测试代码
编译OK后右击工程Run As/Android Application,运行结果如下:
输入30,可以看到本地运行速度快多了。由于计算是在Activity主UI线程中进行的,期间会影响到界面的响应,如果响应时间过长,就会出现程序无响应。建议输入数在25~30之间,效果比较明显。
相关文章推荐
- Android NDK入门实例 计算斐波那契数列二生成.so库文件
- Android NDK入门实例 计算斐波那契数列二生成.so库文件
- Android NDK入门实例 计算斐波那契数列一生成jni头文件
- Android NDK入门实例 计算斐波那契数列一生成jni头文件
- Android-调用本地方法计算int数值相加结果显示在界面上/NDK-JNI开发实例(三)
- Android webview调用本地文件选择失败解决
- Android-调用本地方法将小写字符串转成大写字符串/NDK-JNI开发实例(四)
- Android-调用本地方法实现将C进程分支出来即生成系统进程/NDK-JNI开发实例(九)
- Android应用中实现选择本地文件与目录的实例分享
- Android NDK 调用c++ stl 模板库(修改android.mk文件)
- Android 开发--CMakeList调用本地so文件
- Android GIS开发系列-- 入门季(5) FeatureLayer加载本地shp文件与要素查询
- Java快速入门本地调用哈工大LTP实例
- Android中生成调用本地so文件
- Android NDK 调用c++ stl 模板库(修改android.mk文件)
- Android 开发--CMakeList调用本地so文件
- Android NDK 调用c++ stl 模板库(修改android.mk文件)
- Android中调用第三方打开本地doc、pdf、ppt、text等文件功能的实现
- android调用本地音视频文件获取信息
- Android-java调用本地方法返回字符串显示在界面上/NDK-JNI开发实例(二)