我需要一些幫助,解決一個問題,我真的不忍心。Nexus 6上的應用程序運行速度非常慢Android棉花糖跳過「n」幀
我正在使用真實設備調試我的應用程序。我有兩個,第一個是真正的摩托羅拉低資源(Android 5.0.2),這有助於我發現更多的錯誤;在這個應用程序stra 012 完美作品。第二個設備是的Nexus 6(安卓6.0.1)在應用程序的工作原理非常糟糕,它會很慢(甚至withouth的做任何事情,例如打開一個菜單),它讓我看到這樣的消息:跳過33幀!應用程序可能在其主線程上做了太多工作。
當我必須使用asynk任務時,我使用主線程來處理更少的事情。正如我之前所說,即使我只打開一個菜單(這意味着我不下載或做奇怪的事情),它顯示「skkiped frames」消息。該應用程序從不崩潰,但速度非常緩慢。
我已經在我的SDK管理器上安裝了所有東西。
我將向您解釋一個示例,其中我的應用程序運行緩慢並向您顯示代碼。在我的主要活動中,我有一個帶有NavigationView的工具欄,所以當我點擊「菜單按鈕」打開它時,需要3秒鐘才能打開它。
MainActivity代碼:
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener, View.OnClickListener {
private Toolbar toolbar;
//private FloatingActionButton fab;
private DrawerLayout drawer;
private ActionBarDrawerToggle toggle;
private NavigationView navigationView;
private FragmentManager fragmentManager;
private FragmentTransaction fragmentTransaction;
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initMaterialDesign();
if (savedInstanceState == null){
showFragment(Constants.FRAGMENT_MENU);
navigationView.getMenu().getItem(0).setChecked(true);
getSupportActionBar().setTitle("Menú");
} else{
}
}
private void initMaterialDesign(){
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
/*fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(this);*/
drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
//@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_menu) {
getSupportActionBar().setTitle("Menú");
showFragment(Constants.FRAGMENT_VALORES);
} /*else if (id == R.id.nav_gallery) {
item.setChecked(true);
} */else if (id == R.id.nav_contactanos) {
contactanos();
} /*else if (id == R.id.nav_manage) {
item.setChecked(true);
}*/else if (id == R.id.nav_logut) {
logOut();
}
drawer.closeDrawer(GravityCompat.START);
return true;
}
@Override
public void onClick(View v) {
switch (v.getId()){
/* case R.id.fab:
Snackbar.make(v, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
break;*/
}
}
private void showFragment(int fragment){
fragmentManager = getSupportFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
switch (fragment){
/*case Constants.FRAGMENT_VALORES:
ValoresFragment valoresFragment = new ValoresFragment();
fragmentTransaction.replace(R.id.main_act_contenedorFragments, valoresFragment);
break;
case Constants.FRAGMENT_NOTICIAS:
break;
case Constants.FRAGMENT_WATCHLIST:
break;
case Constants.FRAGMENT_PORTFOLIO:
break;*/
case Constants.FRAGMENT_MENU:
MenuFragment menuFragment = new MenuFragment();
fragmentTransaction.replace(R.id.main_act_contenedorFragments, menuFragment);
break;
}
fragmentTransaction.commit();
}
private void logOut(){
new SweetAlertDialog(this, SweetAlertDialog.WARNING_TYPE)
.setTitleText(getString(R.string.nav_logout))
.setContentText(getString(R.string.seguro_logout))
.showCancelButton(true)
.setConfirmText(getString(R.string.aceptar))
.setCancelText(getString(R.string.cancelar))
.setCancelClickListener(new SweetAlertDialog.OnSweetClickListener() {
@Override
public void onClick(SweetAlertDialog sDialog) {
sDialog.dismiss();
}
})
.setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
@Override
public void onClick(SweetAlertDialog sDialog) {
sDialog.dismissWithAnimation();
borrarSPUser();
irLoginAct();
MainActivity.this.finish();
}
})
.show();
}
private void borrarSPUser(){
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("usuario", "");
editor.putString("pass", "");
editor.commit();
}
private void irLoginAct(){
Intent intentRegistroActivity = new Intent(MainActivity.this, LoginActivity.class);
startActivity(intentRegistroActivity);
}
private void contactanos(){
final Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:"));
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{"[email protected]"});
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "My App");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Cuéntanos lo que quieras sobre la bolsa");
startActivity(Intent.createChooser(emailIntent, "Elegir cliente:"));
}
}
我知道這個代碼將不會幫助你得到一個答案,但我只是想告訴你,我沒有做什麼奇怪的。
這是logcat的:
04-14 12:34:28.596 8419-8419/? I/art: Late-enabling -Xcheck:jni
04-14 12:34:28.646 8419-8419/? W/System: ClassLoader referenced unknown path: /data/app/com.myapp-1/lib/arm
04-14 12:34:28.677 8419-8419/? V/Aplicacion: initParse: Parse iniciado
04-14 12:34:28.725 8419-8425/? I/art: Debugger is no longer active
04-14 12:34:28.764 8419-8445/? D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
04-14 12:34:28.815 8419-8445/? I/Adreno: QUALCOMM build : 52af4d2, I8366cd0437
Build Date : 10/20/15
OpenGL ES Shader Compiler Version: XE031.05.13.02
Local Branch : M14
Remote Branch :
Remote Branch :
Reconstruct Branch :
04-14 12:34:28.819 8419-8445/? I/OpenGLRenderer: Initialized EGL, version 1.4
04-14 12:34:31.008 8419-8419/com.myapp V/LoadingActivity: DescargarAcciones >> Lista Acciones guardada en Application class
04-14 12:34:32.369 8419-8419/com.myapp V/LoadingActivity: getLastUpdate >> UPDATE
04-14 12:34:33.216 8419-8425/com.myapp W/art: Suspending all threads took: 28.414ms
04-14 12:34:33.663 8419-8419/com.myapp V/LoadingActivity: descargarHistorial >> historialIbex35 descargado y guardado
04-14 12:34:33.664 8419-8419/com.myapp V/LoadingActivity: modificarUltimoUpdate - Void done >> update realizado
04-14 12:34:34.000 8419-8419/com.myapp V/LoadingActivity: descargarRanking >> EXITO
04-14 12:34:34.000 8419-8419/com.myapp V/LoadingActivity: parsearRanking >> listaRanking guardada correctamente
04-14 12:34:34.211 8419-8425/com.myapp W/art: Suspending all threads took: 22.491ms
04-14 12:34:34.915 8419-8419/com.myapp I/Choreographer: Skipped 32 frames! The application may be doing too much work on its main thread.
04-14 12:48:33.438 8419-8419/com.myapp I/Choreographer: Skipped 35 frames! The application may be doing too much work on its main thread.
04-14 12:48:42.979 8419-8419/com.myapp I/Choreographer: Skipped 32 frames! The application may be doing too much work on its main thread.
04-14 12:48:43.537 8419-8419/com.myapp I/Choreographer: Skipped 33 frames! The application may be doing too much work on its main thread.
我真的不已瞭解了是怎麼回事。我想記住,這是完美的工作在一個低資源設備,它的速度真的很慢。我已經在互聯網上了,但我還沒有找到任何東西。如果有人可以給我一個提示,那將會非常感激。提前感謝。
這些是我的日誌消息。直到在LoadActivity中完成一切後,MainActivity纔會顯示出來。我使用Parse.com和AsyncTask。我沒有在主線程上做網絡IO。我應該將我的LoadingActivity添加到帖子中嗎?....(這是一個被刪除問題的答案) – QuinDa