나는 안드로이드 게임을 만들었고 누 시아가 마쉬멜로보다 두 배 이상 천천히 움직이는 것을 발견했습니다. 사실 나는 내 코드에서 두 지점 사이에 대략 동일한 시간의 증가가있는 것으로 생각했다.누시가 마시맬로와 비교할 때 훨씬 느립니다.
그래서 뒤로 버튼을 눌렀을 때 테스트를하지만 대략 동일한 결과가 나타납니다 (코드는 아래 참조). 필자는 두 개의 안드로이드 가상 장치 (기록 된 평균 시간 동안 코드를 보았습니다)를 사용하여 이것을 테스트했지만, 태블릿이 누그 (nougat)로 업데이트되어 특정 AVD가 아니기 때문에 처음에 알아 차렸습니다.
나는이 문제의 원인에 관해서 난처한 처지입니다. 내가 가진 몇 가지 아이디어는 다음과 같습니다.
- 컴파일러는 누가 (api 분이 15이고 대상이 25이고 sdk 도구 25.0.2로 구축 중입니다)에 최적화되어 있지 않습니다. 구글이 즉각적으로 해결할 수있는 꽤 널리 퍼진 이슈가 될 것이기 때문에 저에게는있을 것 같지 않습니다.
- OS가 더 많은 리소스를 사용하고 있으므로 게임에 남은 시간이 줄어 듭니다. 이것은 2 배의 속도 감소를 설명해서는 안되기 때문입니다.
- OS가 CPU 사용량에 더 작은 제한으로 추가됩니다. 어쩌면 나는 높은 우선 순위 또는 무엇인가 비슷하게 요구해야 할 것이다. 그러나 명확한 문서화를 기대하기는 쉽지 않을 것이다.
- 나를위한 Android 스튜디오의 설정이 적합하지 않습니다. 이 하나가 나에게 가장 가능성이 보인다하지만 난 아직 나를 도울 아무것도 찾을 수 없습니다.
모든 통찰력이나 복제물은 높이 평가됩니다. 감사.
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>
다른 23 개의 장치를 만들면 동일한 확산이 나타날 것입니다. cpu에 따라. – greenapps
테스트 결과,보고 된 수치가 정확하다면 메서드 호출 당 200 나노초의 추가 오버 헤드 (200ms/1000000)를 보여줍니다. 작은 메서드 호출 (예 : 평균적으로 200 나노초의 내부 계산 시간이 있음)이 많은 경우가 아니면 속도가 "2 배 감소"하지 않아야합니다. – CommonsWare
@ greenapps 23과 24 모두 똑같은 사양의 안드로이드 가상 장치를 사용하고 있으므로 장치에 특정한 것이 없어야합니다. – nickgkg