Android學習探索之Java 8 在Android 開發中的應用

來源:互聯網
上載者:User

標籤:編程   嵌套   沒有   log   tle   res   能力   led   tar   

前言:

  Java 8推出已經將近2年多了,引入很多革命性變化,加入了函數式編程的特徵,使基於行為的編程成為可能,同時減化了各種設計模式的實現方式,是Java有史以來最重要的更新。但是Android上,一直沒有看到支援Java8的訊息。Android到底會不會支援Java8呢?答案是肯定的,Android N已經開始支援Java 8 了。

關於Java 8(1.)使用Lambda運算式

   Java 8的一大亮點是引入Lambda運算式,使用它設計的代碼會更加簡潔。當開發人員在編寫Lambda運算式時,也會隨之被編譯成一個函數式介面。

(2.)引入函數式介面

   Java 8 引入的一個核心概念是函數式介面。如果一個介面定義個唯一一個抽象方法,那麼這個介面就成為函數式介面。

(3.)泛型介面改進

  這是一個以前不能做到的,對編譯器判定泛型能力的努力改進。在以前版本的Java中有許多情形編譯器不能給某個方法計算出泛型,當方法處於嵌套的或串聯方法調用這樣的內容相關的時候,即使有時候對程式員來說它看起來“很明顯”。

(4.)Streams編程

  集合(Collections)的改進也是Java 8的一大亮點,而讓集合越來越好的核心組件則是“Stream”。它與java.io包裡的InputStream和OutputStream是完全不同的概念,它是一個全新的概念,大家不要混淆。此外,Stream的出現也並不是要取代ArrayLists或其他集合,它提供了一種操作大資料介面,讓資料操作更容易和更快。

解說:不過上面的幾大改變僅僅只能在Android N及之後的版本才能使用,這也讓Android 23及以下還在使用Java 7開發的小夥伴們望塵莫及,不過Java 8的lambda運算式還是可以支援的,接下來我們看下如何使用Java 8.如何在Android 開發中使用Java 8?1.)第一步,安裝Java8,並指定項目使用Java8,minSdkVersion <24 只能使用Java8 的 Lambda特性,minSdkVersion>= 24可以使用Java8特性,由此可見全部普及Java8還是需要一定時間的 

2.)第二步在module的build.gradle中添加相關配置
android {  ...  defaultConfig {    ...    jackOptions {      enabled true    }  }  compileOptions {    sourceCompatibility JavaVersion.VERSION_1_8    targetCompatibility JavaVersion.VERSION_1_8  }}

我這裡使用的Android studio 2.2.2版本 Android版本為24,如果是低於24版本的話是無法使用Java 8特性的。如果僅僅只想使用lambda運算式的話完全夠用了,我們只需把minSdkVersion設為14即可。

以下是我自己的設定範例

android {    compileSdkVersion 24    buildToolsVersion ‘24.0.2‘    defaultConfig {        applicationId "com.whoislcj.jsbridge"        minSdkVersion 14        targetSdkVersion 24        versionCode 1        versionName "1.0"        jackOptions {            enabled true        }    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘        }    }    dexOptions {        incremental true    }    compileOptions {        sourceCompatibility JavaVersion.VERSION_1_8        targetCompatibility JavaVersion.VERSION_1_8    }    productFlavors {    }}
關於Lambda

   “Lambda 運算式”(lambda expression)是一個匿名函數,Lambda運算式基於數學中的λ演算得名,直接對應於其中的lambda抽象(lambda abstraction),是一個匿名函數,即沒有函數名的函數。Lambda運算式可以表示閉包(注意和數學傳統意義上的不同)。

如何使用Java 8 Lambda運算式?1.)使用Lambda運算式樣本

這裡以常見的Java匿名內部類為例

(1.)未使用lambda運算式之前

1     findViewById(R.id.to_web).setOnClickListener(new View.OnClickListener() {2             @Override3             public void onClick(View v) {4                 Toast.makeText(MainActivity.this, "終於等到你", Toast.LENGTH_LONG).show();5             }6         });

(2.)使用lambda運算式

1      findViewById(R.id.to_web).setOnClickListener((View v) -> {2             Toast.makeText(this, "終於等到你", Toast.LENGTH_LONG).show();3         });

(3.)進一步簡化

1 findViewById(R.id.to_web).setOnClickListener(v -> Toast.makeText(this, "終於等到你", Toast.LENGTH_LONG).show());
 2.)擴充知識

  在Android studio 2.1 版本要想實現Lambda運算式的話可以採用第三方AS retrolambda外掛程式來實現,github地址:https://github.com/evant/gradle-retrolambda,同樣那種方式僅僅支援lambda運算式而不支援Java8特性。

目前遇見的問題

 1.)中文亂碼問題

這個問題我一直以為是編碼問題,後來才發現是jackOptions {enabled true}引起的中文亂碼,解決辦法在project的gradle.properties中添加如下代碼

org.gradle.jvmargs=-Dfile.encoding=UTF-8

 2.)Instant Run 目前不能用於 Jack,目前建議暫時關閉Instant Run使用。

總結:

   本文僅僅是學習了如何使用在Android 開發中使用Java8的lambda運算式來使代碼變得簡潔,借來會逐步對Java的一些特性進行學習。

 

Android學習探索之Java 8 在Android 開發中的應用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.