2012-01-26 9 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()でこれを置くことができ

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

あなたはそのようなバックボタンを無効にすることができますonPauseイベント。アンドロイドが未知のものでどうやって混乱するかはあなた次第です: – fjdumont

+0

スタックトレースまたはいくつかのログがありますか? – AlexS

答えて

3

ユーザーが戻るボタンを押したときにどのような操作を行いますか?私のアプリでは、ユーザーが主なアクティビティにあり、アクティビティスタックの深いところにいない場合は、バックボタンを無効にして、AlertDialogを入力してアプリを終了するかどうかを尋ねると、System.exit()私は家をきれいにして、私が最初にすべてを殺して無効にする方法を話します。全くわからない

@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

しかし、system.exit()を使用すると思いますそれが開始されていないようにアプリケーションの状態を殺す必要がありますので、すべてのビューが再び作成されます.....それはあなたがカメラで持っている問題を助けるが、それはonresumeで起きるクラッシュを保つだろう。私はカメラを解放してエラーをキャッチするために、私がonPauseで使用するものの少しの例を追加します。 –

+0

それらがあなたのために働いていない場合は、質問にlogcatダンプを追加して、エラースタックを確認する必要があります –

関連する問題