android服务在一段时间后崩溃了

时间:2015-02-04 08:02:04

标签: java android service

我已经为锁定屏幕服务创建了一项服务,服务的目的是注册和注册接收器,但由于我的应用程序在没有足够的内存消耗时崩溃,导致内存泄漏 这是我的代码

    package com.itstars.daynightlockscreen;

import android.app.KeyguardManager;
import android.app.KeyguardManager.KeyguardLock;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.PixelFormat;
import android.media.AudioManager;
import android.os.IBinder;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.Toast;

public class LockService extends Service {
    public static boolean wal;
    public static boolean isRunning;

    public static TimeChangeReceiver receiver;
     KeyguardManager keyguardManager;
     KeyguardLock lock;

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        keyguardManager  = (KeyguardManager) getSystemService(Service.KEYGUARD_SERVICE);
        lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);
        lock.disableKeyguard();
        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        wal = intent.getBooleanExtra("wal", false);
        isRunning = intent.getBooleanExtra("locker",false);
        receiver = new TimeChangeReceiver();
        registerReceiver(receiver, filter);
        isRunning = true;
        return START_STICKY;
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        unregisterReceiver(receiver);
        isRunning = false;
        keyguardManager  = (KeyguardManager) getSystemService(Service.KEYGUARD_SERVICE);
        lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);
        lock.reenableKeyguard();
    }


}

1 个答案:

答案 0 :(得分:0)

您是否在Manifest中定义了服务?如果是,则   那你有同意吗

`android.permission.DISABLE_KEYGUARD`
清单中的

?如果是,那么
将代码放在onStartCommand的try-catch块中,在onStartCommand方法的第一行放置一个调试点,观察它跳转到catch块的行。 因为错误必须只在您的onStartCommand方法中。

START_NOT_STICKY

从onStartCommand(Intent,int,int)返回的常量:如果此服务的进程在启动时被终止(从onStartCommand(Intent,int,int)返回后),并且没有新的启动意图传递给它,然后将服务从启动状态中取出,并且不要重新创建,直到将来显式调用Context.startService(Intent)。

START_STICKY

从onStartCommand(Intent,int,int)返回的常量:如果此服务的进程在启动时被终止(从onStartCommand(Intent,int,int)返回后),则将其保留在启动状态国家但不保留这种意图。

使用上面的描述决定你想要使用粘性意图的位置吗?