2016-07-01 3 views
0

Я делаю простую игру.В чем смысл приложения делает слишком много работы в главной теме?

1-ый экран - это заставка с двумя изображениями, 1 индикатор выполнения и фоновое изображение.

2-й экран - Опции, которые можно выбрать из разных уровней/вариантов игр. У него мало TextFields, Spinner Items, 2 изображения и 1 фон. Эти изображения и фоновые изображения такие же, как и в заставке.

На экране параметров есть два способа перехода на новую активность в игре либо выбрать «3x3» (MainActivity.class Activity), либо 4X4 (мероприятие bigmain.class). Обе эти операции воспроизводятся на экране и содержат одно изображение и сетку, снабженную несколькими ImageViews.

И MainActivity, и bigmain имеет метод onClick() макета сетки. . Все дальнейшие обработки игры, такие как проверка того, выиграет ли кто-либо или нет, разные способы вызова на другой ход игрока. Таким образом, у обоих есть много кода и все в одном файле класса java. Это причина? Если так, то как его преодолеть. Я прикрепляю свой отчет logcat, когда я устанавливаю приложение в свой телефон через adb. См. Жирный текст.

07-01 17:41:18.454 7003-7003/bt4u.com.pokemonbattles W/System: ClassLoader referenced unknown path: /data/app/bt4u.com.pokemonbattles-2/lib/arm64 
07-01 17:41:18.491 7003-7003/bt4u.com.pokemonbattles W/System: ClassLoader referenced unknown path: /data/app/bt4u.com.pokemonbattles-2/lib/arm64 
07-01 17:41:18.492 7003-7003/bt4u.com.pokemonbattles I/LoadedApk: No resource references to update in package common 
07-01 17:41:18.493 7003-7003/bt4u.com.pokemonbattles I/LoadedApk: No resource references to update in package com.rr.neptune 
07-01 17:41:46.642 7332-7332/bt4u.com.pokemonbattles W/System: ClassLoader referenced unknown path: /data/app/bt4u.com.pokemonbattles-2/lib/arm64 
07-01 17:41:47.290 7332-7332/bt4u.com.pokemonbattles W/System: ClassLoader referenced unknown path: /data/app/bt4u.com.pokemonbattles-2/lib/arm64 
07-01 17:41:47.291 7332-7332/bt4u.com.pokemonbattles I/LoadedApk: No resource references to update in package common 
07-01 17:41:47.292 7332-7332/bt4u.com.pokemonbattles I/LoadedApk: No resource references to update in package com.rr.neptune 
**07-01 17:41:47.824 7332-7332/bt4u.com.pokemonbattles I/System.out: Splash screen activity (splash.java)** 
07-01 17:41:47.834 7332-7363/bt4u.com.pokemonbattles D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true 
07-01 17:41:47.863 7332-7363/bt4u.com.pokemonbattles I/Adreno: QUALCOMM build     : 6d30364, I5d4b06969f 
07-01 17:42:12.187 7660-7686/bt4u.com.pokemonbattles I/OpenGLRenderer: Initialized EGL, version 1.4 
07-01 17:42:15.294 7660-7660/bt4u.com.pokemonbattles I/System.out: Game options activity (gameoptions.class) 
07-01 17:42:15.350 7660-7660/bt4u.com.pokemonbattles D/android.widget.GridLayout: horizontal constraints: x1-x0>=243, x2-x1>=0, x3-x2>=0, x4-x3>=430, x4-x0<=656 are inconsistent; permanently removing: x4-x0<=656. 
**07-01 17:42:17.615 7660-7660/bt4u.com.pokemonbattles I/Choreographer: Skipped 125 frames! The application may be doing too much work on its main thread.** 
**07-01 17:48:20.373 7660-7660/bt4u.com.pokemonbattles I/System.out: Game Option A Screen (MainActivity.class)** 
07-01 17:48:20.601 7660-7686/bt4u.com.pokemonbattles D/OpenGLRenderer: endAllStagingAnimators on 0x55c0c40f40 (RippleDrawable) with handle  0x55c08e70b0 
**07-01 17:48:37.333 7660-7660/bt4u.com.pokemonbattles I/System.out: Game Option B Screen (bigmain.class)** 
07-01 17:48:37.358 7660-7660/bt4u.com.pokemonbattles D/android.widget.GridLayout: vertical constraints: y4-y0>=900, y4-y3<=230, y3-y2<=230, y2-y1<=224, y1-y0<=210 are inconsistent; permanently removing: y4-y3<=230. 
07-01 17:48:37.685 7660-7686/bt4u.com.pokemonbattles D/OpenGLRenderer: endAllStagingAnimators on 0x55c0c40f40 (RippleDrawable) with handle 0x55c0d44e20 
+2

Возможный дубликат [Приложение может делать слишком много работы на своей основной нити] (http://stackoverflow.com/questions/14678593/the-application-may-be-doing-too-much- work-on-its-main-thread) – Ironman

+0

Вы пытаетесь создать новую тему для обработки? Насколько я помню, вы не должны использовать mainthread для длинных/тяжелых операций. Попробуйте опубликовать runnable. – Memme

+0

любой пример, который вы можете предоставить для этого –

ответ

1

Application is doing too much work in main Thread означает, что вы делаете некоторые высокие задачи как large data object fetching и преобразование или loading with large Image это время такой ошибки больше появляться.

Больше explnation: это может быть из-за какой-то тяжелой обработки, что вы делают в центре вашего приложения или доступа к БД или любой другой вещь, которая заставляет нить, чтобы остановить на некоторое время

Чтобы решить эту проблему, просто создайте Multithreading.

UnderStandMent:

lets say you have for loop inside on Button so you have set it `OnClickListener` like this 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_inventory); 

    button.setOnclickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        for(i=0;i<1000;i++){ 
        -- Print i 

         i++;     
        } 

        } 
      }); 

    } 

как этот не поставить после события щелчка любой другой непригодной код внутри что проверить, что путь ..

+0

Нет, я не занимаюсь тяжелой обработкой, и даже все используемые изображения все меньше, чем 20kb –

+0

Я делаю игру как tic tac toe –

+0

@SWARNVEERSINGH разместите свой код. – Ironman

0

Это означает, что вы делаете тяжелую задачу на главном потоке пользовательского интерфейса. Это приводит к тому, что ANR (приложение не отвечает), потому что вы выполняете процесс в потоке пользовательского интерфейса, который занимает много времени. За это время GUI (графический интерфейс пользователя) закроется, что приведет к тому, что пользовательские нажатия не будут действовать.

Вы должны использовать другой поток для тяжелой задачи.

Улучшенный подход будет использовать AsyncTask.

private class AsyncCaller extends AsyncTask<Void, Void, Void> 
{ 
    ProgressDialog pdLoading = new ProgressDialog(AsyncExample.this); 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

     //this method will be running on UI thread 
     pdLoading.setMessage("\tLoading..."); 
     pdLoading.show(); 
    } 
    @Override 
    protected Void doInBackground(Void... params) { 

     //this method will be running on background thread so don't update UI frome here 
     //do your long running http tasks here,you dont want to pass argument and u can access the parent class' variable url over here 


     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 

     //this method will be running on UI thread 

     pdLoading.dismiss(); 
    } 

    } 
+0

[Вот мой код] (http://www.paste.org/81111) вы можете привести пример того, как это сделать в моем коде –

Смежные вопросы