簡體   English   中英

Android用線程強制關閉異常

[英]Android force close exceptions with thread

通常,當我關閉我的應用程序時,我會向我的服務發送一個意圖,以使用onStartCommand帶有一個布爾值true來安全關閉信號。 我在我的應用程序類onTerminate中執行此操作。 我添加了if語句,因為在此塊中強制關閉應用程序時收到nullptrexception。

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    if (intent != null) {
        boolean state = intent.getBooleanExtra("terminate", false);
        mSafeShutdown = state;
    }
    else if (mUpdater != null && mUpdater.isRunning()) {
        Log.d(TAG, "activity force closed?" + 
            " Attempting to handle service thread shutdown safely...");
        mUpdater.isRunning(false);
        try {
            mUpdater.join();
        } catch (InterruptedException e) {
            Log.e(TAG,"Service's UpdaterThread couldn't join");
        }
    }
    return START_STICKY;
}

但是,這會使我的服務繼續運行-

static final int DELAY = 2000;
public void run() {
    while (mIsRunning) {
        if (!mJobQueue.isEmpty()) {
            //do work
        }
        else if (mSafeShutdown) {
            mIsRunning = false;
            stopSelf();
        }
        else {
            sleep(DELAY);
        }
    }
}

強制關閉的事實使調試器斷開連接,這使得它很難確切了解發生了什么。是否有更好/更安全的方法告訴服務線程應用程序已關閉?

由於您的線程是子類,因此在其中創建一個方法以將其關閉,並在您的父類中對其進行調用。

可以在此處找到示例http://download.oracle.com/javase/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html

暫無
暫無

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

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