1

我一直在做一個安卓遊戲,我注意到它的運行速度比牛軋糖慢兩倍以上,比棉花糖要慢。事實上,我發現代碼中的任何兩點之間似乎有大致相同的時間增加。牛軋糖比棉花糖慢得多

所以我做了一個測試應用程序,當按下後退按鈕時,做了一個測試,但我又得到了大致相同的結果(代碼如下)。我使用兩個android虛擬設備(請參閱代碼記錄的平均時間,以毫秒爲單位)進行了測試,但我最初注意到它,因爲我的平板電腦已更新爲牛軋糖,因此它不是AVD特有的。

我難以理解是什麼造成了這種情況。我得到的一些想法如下:

  • 編譯器對牛軋糖沒有優化(api min是15,目標是25,我正在用sdk工具25.0.2構建)。似乎不太可能對我來說,因爲這將是一個非常普遍的問題,谷歌會立即修復。
  • 該操作系統正在使用更多的資源,因此我的遊戲剩餘的更少。不太可能,因爲這不應該導致速度下降2倍。
  • 操作系統在CPU使用率的較小限制內添加。也許我必須要求高優先級或類似的東西,但我希望清晰的文檔也不太可能。
  • Android studio對我而言的設置並不是最優的。這對我來說似乎是最可能的,但我找不到任何可以幫助我的東西。

感謝任何見解或複製!謝謝。

MainActivity

package com.example.nickgkg.test; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.TextView; 
public class MainActivity extends AppCompatActivity{ 
    TextView text; 
    long time = 0; 
    @Override 
    protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    text = (TextView)this.findViewById(R.id.text); 
    } 
    @Override 
    public void onBackPressed(){ 
    //API 24(nougat) vs API 23(marshmallow) 
    //API 25 performs the same as API 24 so I didn't include it 
    long t=System.nanoTime(); 
    if(false){//Toggle this to change the test 
     float garbage; 
     for(int i=0;i<100000000;i++) 
     garbage=i*27/2200f; 
     //API 24:710ms vs API 23:620ms 
    }else{ 
     for(int i=0;i<1000000;i++) 
     something(); 
     //API 24:320ms vs API 23:120ms 
    } 
    time=System.nanoTime() - t; 
    text.setText(time/1000000f+"ms"); 
    } 
    private void something(){ 
    //BLANK function call 
    } 
} 

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    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="com.example.nickgkg.test.MainActivity"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Hello World!" 
     android:id="@+id/text"/> 
</RelativeLayout> 
+0

在不同的23個設備上,你會看到相同的時間差。取決於CPU。 – greenapps

+0

如果報告的數據是正確的,那麼您的測試表明每個方法調用的額外開銷爲200納秒(200ms/1000000)。除非你有很多微小的方法調用(例如每個內部計算時間的平均值爲200納秒),否則不應該導致「速度降低2倍」。 – CommonsWare

+0

@greenapps我正在使用android虛擬設備的23和24完全相同的規格,所以什麼都不應該是設備特定的 – nickgkg

回答

0

更新Android工作室固定的問題 (從2.2更新到2.3)。我仍然不確定爲什麼會發生這種情況,但我認爲可能是因爲nougat的調試版本沒有像棉花糖的調試版本那樣進行優化。另一個注意事項;也許如果我測試發佈版本而不是調試版本,那麼我永遠不會有這個問題(雖然沒有測試過)。

+0

Android Studio 2.3是最新的 –

+0

@ cricket_007我的錯誤。感謝您指出了這一點!現在修復 – nickgkg