1

나는 안드로이드 게임을 만들었고 누 시아가 마쉬멜로보다 두 배 이상 천천히 움직이는 것을 발견했습니다. 사실 나는 내 코드에서 두 지점 사이에 대략 동일한 시간의 증가가있는 것으로 생각했다.누시가 마시맬로와 비교할 때 훨씬 느립니다.

그래서 뒤로 버튼을 눌렀을 때 테스트를하지만 대략 동일한 결과가 나타납니다 (코드는 아래 참조). 필자는 두 개의 안드로이드 가상 장치 (기록 된 평균 시간 동안 코드를 보았습니다)를 사용하여 이것을 테스트했지만, 태블릿이 누그 (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> 
+0

다른 23 개의 장치를 만들면 동일한 확산이 나타날 것입니다. cpu에 따라. – greenapps

+0

테스트 결과,보고 된 수치가 정확하다면 메서드 호출 당 200 나노초의 추가 오버 헤드 (200ms/1000000)를 보여줍니다. 작은 메서드 호출 (예 : 평균적으로 200 나노초의 내부 계산 시간이 있음)이 많은 경우가 아니면 속도가 "2 배 감소"하지 않아야합니다. – CommonsWare

+0

@ greenapps 23과 24 모두 똑같은 사양의 안드로이드 가상 장치를 사용하고 있으므로 장치에 특정한 것이 없어야합니다. – nickgkg

답변

0

은 (2.3에서 2.2으로 업데이트) 문제를 해결 . 왜 이런 일이 처음에는 일어 났는지 확실하지 않지만, 누가 (nougat)를위한 디버그 빌드가 마시멜로 디버그 빌드만큼 최적화되지 않았을 수도 있습니다. 또 다른 메모에서; 아마도 디버그 빌드 대신 릴리스 빌드를 테스트 한 경우이 문제가 발생하지 않았을 것입니다.

+0

안드로이드 스튜디오 2.3은 최신 –

+0

@ cricket_007 내 실수. 그 점을 지적 해 주셔서 감사합니다! 지금 수정 됨 – nickgkg