Android NDK入门实例 计算斐波那契数列三在Android中调用本地库文件
来源:互联网 发布:suse linux 9 下载 编辑:程序博客网 时间:2024/05/09 12:19
上一篇生成了本地共享库文件,这一篇主要介绍如何在Android中调用本地代码。同时测试Android应用程序。改程序功能:输入一个数,分别运行4中算法计算出这个只对应的斐波那契数,同时将不同算法话费的时间显示出来。
一、编写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;@Overrideprotected 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);}/*@Overridepublic 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入门实例 计算斐波那契数列三在Android中调用本地库文件
- Android NDK入门实例 计算斐波那契数列二生成.so库文件
- Android NDK入门实例 计算斐波那契数列一生成jni头文件
- Android-调用本地方法计算int数值相加结果显示在界面上/NDK-JNI开发实例(三)
- 斐波那契数列数列计算
- 动态规划入门-斐波那契数列的计算
- 数据结构实例<二>(斐波那契数列)入门
- 矩阵在计算斐波那契数列的运用
- android NDK入门实例,生成.so文件
- Java计算斐波那契数列
- 1042: 计算斐波那契数列
- 计算斐波那契数列
- 斐波那契数列的计算
- 斐波那契数列的计算
- Python计算斐波那契数列
- 计算斐波那契数列
- 斐波那契数列计算
- 计算斐波那契数列
- Android中assets目录和res/raw目录的异同和使用场景
- 未经处理的异常: Microsoft C++ 异常 std::bad_alloc
- 工厂三兄弟之抽象工厂模式(三)
- 孙鑫VC++深入详解:Lesson9 Part8---给程序加个启动画面
- 错误1068:依存服务或组无法启动,怎么办?
- Android NDK入门实例 计算斐波那契数列三在Android中调用本地库文件
- Java动态单向链表
- 介绍一下Oracle的操作符优化?
- JSON详解
- 如何获取键盘的高度,而不需要通过通知?
- 不能将参数 1 从“const char [8]”转换为“LPCWSTR”
- 走近NoSQL数据库的四大家族 深度解读
- assert()函数用法总结
- Listener