簡體   English   中英

一段時間后android服務崩潰

[英]android service crashes after sometime

我已經為鎖定屏幕服務創建了一個服務,該服務的目的是注冊和取消注冊接收者,但是由於沒有足夠的內存來消耗我的應用程序而導致崩潰,這會導致內存泄漏這是我的代碼

    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();
    }


}

您在清單中定義了服務嗎? 如是,
那你同意嗎

`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)返回之后),則將其保留為啟動狀態,但不保留此狀態傳達了意圖。

使用上面的描述確定您要在哪里使用粘性意圖?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM