2012-01-26 4 views
1

У меня проблема, когда мое приложение продолжает сбой однажды в приложении и нажимает кнопку «назад» на моем телефоне, а затем снова появляется в приложении. Я предполагаю, что я обрабатываю какое-то состояние или что-то не так:Задняя кнопка Android вызывает сбой?

package com.animeus; 

import com.animeus.Factories.CameraDialogsFactory; 
import com.animeus.Factories.CameraFactory; 
import com.animeus.Services.CameraService; 

import android.app.Activity; 
import android.hardware.Camera; 
import android.os.Bundle; 
import android.view.MotionEvent; 
import android.view.View; 

public class LightBulbActivity extends Activity { 
    /** Called when the activity is first created. */ 
    Camera c; 

    //Application starts here 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     loadComponentsToUse(); 
     setComponentEvents(); 

     if (c == null) 
      CameraDialogsFactory.GetNoCameraFoundDialog(this).show(); 
     else 
      setComponentEvents(); 
    } 

    //Sets all the components events 
    private void setComponentEvents() { 
     View v = (View)findViewById(R.id.LightBulbView); 
     v.setOnTouchListener(new View.OnTouchListener() { 

      public boolean onTouch(View v, MotionEvent event) { 
       triggerLightEvent(event.getAction()); 
       return false; 
      } 
     }); 
    } 

    //Turns the led on or off 
    private void triggerLightEvent(int currentevent) { 
     if (currentevent == MotionEvent.ACTION_DOWN) 
      CameraService.turnLedLightOn(c); 
     else if (currentevent == MotionEvent.ACTION_UP) 
     { 
      CameraService.turnLedLightOff(c); 
     } 
    } 

    //Loads the "global" components we are supposed to use 
    private void loadComponentsToUse() { 
     c = CameraFactory.getCamera(); 
    } 

    //Called once the activity ain't visible for the user anymore 
    @Override 
    public void onStop() { 
     super.onStop(); 
    } 


    @Override 
    public void onPause() { 
     super.onPause(); 
    } 


    @Override 
    public void onResume() { 
     super.onResume(); 
    } 
} 

любые идеи? Я также попытался выпустить камеру на «onPause» и «onStop», а затем воссоздать камеру «onResume», но это также приводит к сбою приложения ...

и да, я знаю .. это не полный код .. но если вам нужно больше кода, то дайте мне знать

Заранее благодарим!

+1

Не совсем уверен, но я видел, как люди, располагающие их camerase в onPause. Это зависит от вас, выясняя, как андроид сталкивается с неразделенными вещами: p – fjdumont

+0

У вас есть стек или несколько журналов? – AlexS

ответ

3

Какое действие вы хотите предпринять, когда пользователь нажимает кнопку «Назад»? В моих приложениях, если пользователь находится в основном действии, а не в глубине стека активности, я переопределяю подсказку, чтобы запросить у пользователя AlertDialog, который спрашивает их, хотят ли они выйти из приложения, а затем, если они нажмут да, я использую System.exit() после Я убираю дом, так сказать, с помощью метода, который я создаю, чтобы убить и свернуть все сначала.

Вы можете изменить кнопку назад так:

@Override 
public void onBackPressed(){ 
    super.onBackPressed(); 
    cleanHouse(); 
    System.exit(0);  
} 

Вы можете также поместить это в ваш onPause():

@Override 
protected void onPause() { 
    super.onPause(); 
    try{ 
     cam.camera.release(); 
    }catch(NullPointerException e){ 
     e.printStackTrace(); 
     try{ 
      cam.camera.unlock(); 
     }catch(NullPointerException f){ 
      f.printStackTrace(); 
     } 
    } 
} 
+0

Хорошо, я не думаю, что проблема с актуалом - это действие обратной кнопки Больше нравится, когда пользователь снова открывает приложение. Это происходит тогда, когда происходит авария. – Inx

+0

, но Im думает, если вы используете system.exit() it должен убить состояние приложения, как будто он не был запущен, поэтому все представления будут настроены на повторное создание снова ... что поможет с проблемой, с которой вы работаете с камерой, но это предотвратит возникновение сбоя в onresume. Я добавлю небольшой пример того, что я использую в onPause, чтобы освободить камеру и поймать ошибки. –

+0

Если эти arent работают для вас, вы должны добавить дамп logcat в вопрос, чтобы мы могли увидеть стек ошибок –

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