繁体   English   中英

使用wakelock.release()关闭应用程序时Android应用程序崩溃

[英]Android app crashed when closing app using wakelock.release()

我有一个简单的闪光灯应用程序运行良好,但当用户关闭应用程序时,应用程序崩溃。 我认为问题出在唤醒锁上。

当闪光灯打开时,唤醒锁被打开,当闪光灯关闭时,唤醒锁被关闭。 这工作正常,但一旦用户按下或回家应用程序崩溃。

我的日志数据:

10-24 09:52:45.235:E / AndroidRuntime(6614):进程:r1d.org.uk.flashlight,PID:6614 10-24 09:52:45.235:E / AndroidRuntime(6614):java.lang.RuntimeException :无法销毁活动{r1d.org.uk.flashlight / r1d.org.uk.flashlight.MainActivity}:java.lang.RuntimeException:WakeLock欠锁MyWakelockTag 10-24 09:52:45.235:E / AndroidRuntime(6614) ):在android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3812)

主要活动:

public class MainActivity extends Activity {

    private ImageView lightToggle;
    private ImageButton lightSwitch;
    Camera camera = null;
    Parameters parameters;
    Boolean isOn = false;
    int lightON = R.drawable.on;
    int lightOFF = R.drawable.off;
    int switchON = R.drawable.switch_on;
    int switchOFF = R.drawable.switch_off;
    Boolean hasFlash;
    PowerManager powerManager;
    PowerManager.WakeLock wakeLock;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        AdManager ads = new AdManager(this);
        lightToggle = (ImageView) findViewById(R.id.lightOn);
        lightSwitch = (ImageButton) findViewById(R.id.lightSwitch);
        Context context = this;
        hasFlash = context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
        powerManager = (PowerManager) getSystemService(POWER_SERVICE);
        wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakelockTag");

        if(!hasFlash){
            ContextThemeWrapper themedContext;
            if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ) {
                themedContext = new ContextThemeWrapper( MainActivity.this, android.R.style.Theme_Holo_Light_Dialog_NoActionBar );
            }
            else {
                themedContext = new ContextThemeWrapper( MainActivity.this, android.R.style.Theme_Light_NoTitleBar );
            }
            AlertDialog.Builder builder = new AlertDialog.Builder(themedContext);
            builder.setTitle(getResources().getString(R.string.notsupported))
                    .setMessage(getResources().getString(R.string.notsupportedinfo))
                    .setIcon(android.R.drawable.ic_dialog_alert)
                    .setNegativeButton(getResources().getString(R.string.ok), new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int i) {
                            dialog.cancel();
                        }
                    });
            builder.show();
        }
        turnOn();
        lightSwitch.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(isOn){
                    turnOff();
                } else {
                    turnOn();
                }
            }
        });
    }
    private void turnOn(){
        lightToggle.setImageDrawable(getResources().getDrawable(lightON));
        lightSwitch.setImageDrawable(getResources().getDrawable(switchON));
        wakeLock.acquire();
        if(hasFlash) {
            camera = Camera.open();
            parameters = camera.getParameters();
            parameters.setFlashMode(Parameters.FLASH_MODE_TORCH); //FLASH_MODE_ON
            camera.setParameters(parameters);
        }
        isOn = true;
    }
    private void turnOff(){
        lightToggle.setImageDrawable(getResources().getDrawable(lightOFF));
        lightSwitch.setImageDrawable(getResources().getDrawable(switchOFF));
        wakeLock.release();
        if(hasFlash) {
            parameters.setFlashMode(Parameters.FLASH_MODE_OFF);
            camera.setParameters(parameters);
            camera.release();
            camera = null;
        }
        isOn = false;
    }
    @Override
    public void onDestroy() {
        turnOff();
        super.onDestroy();
    }
    @Override
    public void onPause(){
        turnOff();
        super.onPause();
    }
    @Override
    public void onResume(){
        turnOn();
        super.onResume();
    }
}

onDestroy你试图发布一个已经在onPause发布的唤醒锁。 这应该工作:

if (wakeLock.isHeld()) {
    wakeLock.release();
}

当 object 添加到 ArrayList 时,Android 应用程序崩溃<object><div id="text_translate"><p>我是新手,因此对任何错误表示歉意。</p><p> 背景:作为 object 培训的一部分,我正在尝试添加 object 练习的 arraylist。 然而。 每次我尝试将 object 练习添加到训练的 Arraylist 时,应用程序都会崩溃。 欢迎任何帮助。</p><p> 对象训练和锻炼看起来像这样</p><pre>public class Training { public Integer trainingNumber; public Date datum; public Integer nrOfExercises; public ArrayList&lt;Exercise&gt; exercises; } public class Training { public Integer trainingNumber; public Date datum; public Integer nrOfExercises; public ArrayList&lt;Exercise&gt; exercises; }</pre><p> 试图生成所有这些的代码如下:</p><pre> private Training createRandomTraining(int i){ Training randomTraining = new Training(); Random random = new Random(); int d = random.nextInt(30)+1; int m = random.nextInt(12)+1; //int y = random.nextInt(21)+2000; int amountOfExercises = random.nextInt(9-6)+6; randomTraining.trainingNumber = i; randomTraining.datum = new Date(2021,m,d); for (int j = 0; j &lt; amountOfExercises; j ++){ Exercise exercise = new Exercise(); Random r = new Random(); int set = r.nextInt(5)+1; int nameInt = r.nextInt(3); int rep = r.nextInt(12)+1; //int y = random.nextInt(21)+2000; exercise.trainingNumber = i; exercise.exerciseNumber = j+1; exercise.exerciseName = getExerciseName(nameInt); exercise.sets = set; exercise.reps = rep; exercise.weight = random.nextInt(200-50)+50; randomTraining.exercises.add(exercise); //the app crashes here. //The other parts work fine. } randomTraining.nrOfExercises = amountOfExercises; return randomTraining; }</pre></div></object>

[英]Android app crashed when object is added to ArrayList<Object>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 当我尝试打开它时,Android 应用程序崩溃了 Android 应用程序在更改方向时崩溃 Android应用程序在setContentView上崩溃 不幸的是,使用安卓手机启动应用程序时应用程序崩溃 Android教程(第一个)应用程序崩溃 设置ListAdapter时Android Java App崩溃 当 object 添加到 ArrayList 时,Android 应用程序崩溃<object><div id="text_translate"><p>我是新手,因此对任何错误表示歉意。</p><p> 背景:作为 object 培训的一部分,我正在尝试添加 object 练习的 arraylist。 然而。 每次我尝试将 object 练习添加到训练的 Arraylist 时,应用程序都会崩溃。 欢迎任何帮助。</p><p> 对象训练和锻炼看起来像这样</p><pre>public class Training { public Integer trainingNumber; public Date datum; public Integer nrOfExercises; public ArrayList&lt;Exercise&gt; exercises; } public class Training { public Integer trainingNumber; public Date datum; public Integer nrOfExercises; public ArrayList&lt;Exercise&gt; exercises; }</pre><p> 试图生成所有这些的代码如下:</p><pre> private Training createRandomTraining(int i){ Training randomTraining = new Training(); Random random = new Random(); int d = random.nextInt(30)+1; int m = random.nextInt(12)+1; //int y = random.nextInt(21)+2000; int amountOfExercises = random.nextInt(9-6)+6; randomTraining.trainingNumber = i; randomTraining.datum = new Date(2021,m,d); for (int j = 0; j &lt; amountOfExercises; j ++){ Exercise exercise = new Exercise(); Random r = new Random(); int set = r.nextInt(5)+1; int nameInt = r.nextInt(3); int rep = r.nextInt(12)+1; //int y = random.nextInt(21)+2000; exercise.trainingNumber = i; exercise.exerciseNumber = j+1; exercise.exerciseName = getExerciseName(nameInt); exercise.sets = set; exercise.reps = rep; exercise.weight = random.nextInt(200-50)+50; randomTraining.exercises.add(exercise); //the app crashes here. //The other parts work fine. } randomTraining.nrOfExercises = amountOfExercises; return randomTraining; }</pre></div></object> 单击“返回”时Android应用程序未正确关闭 定义Uri Android时应用关闭 在 android 上安装数据库期间,将 AsyncTask 与 Sqlite 一起使用会导致应用程序崩溃?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM