簡體   English   中英

Android應用程序退出,沒有任何異常

[英]Android application exits without any exception

我正在構建一個應用程序,它在WebView中顯示一些緩存在SQLite數據庫中的遠程數據。 WebView通過JavaScript界面​​從JavaScript函數請求數據。

當用戶鍵入頁面上的input元素時,JavaScript函數通過調用Java函數來請求搜索結果,而Java函數又會觸發sql查詢。 然后以合適的JSON格式打包結果並返回。

除非您非常快速地輸入,否則提取數據的工作正常。 如果您的應用程序退出而不被拋出的異常幾個按鍵后鍵入速度不夠快,它只是回到主屏幕。

我已經設法縮小了原因 - 評論調用.query方法可以防止崩潰,但渲染app無用。

有沒有辦法檢查導致應用程序退出的原因,另一個可能有用的日志或工具?

Java功能代碼:

    public Lot[] getLotList(String query, int limitCount) {
    ...
    ...
    String[] resultColumns = new String[] { LotsSearch._ID };
    String queryWhere = LotsSearch.TABLE_NAME + " MATCH ?";
    String[] queryArgs = new String[] { query + "*" };
    String sortOrder = LotsSearch.COLUMN_NAME_NUMBER + " ASC, " + LotsSearch.COLUMN_NAME_TITLE + " ASC";
    String limit = null;
    Cursor cursor = null;
    if (limitCount != -1)
        limit = "0," + limitCount;
    try {
        cursor = mDb.query(LotsSearch.TABLE_NAME, resultColumns, queryWhere, queryArgs, null, null, sortOrder, limit);
        if (cursor != null && cursor.moveToFirst()) {
            result = new Lot[cursor.getCount()];
            try {
                int idColumnIndex = cursor.getColumnIndexOrThrow(LotsSearch._ID);
                int lotId;
                Lot lot;
                do {
                    lotId = cursor.getInt(idColumnIndex);
                    lot = mLots.get(lotId);
                    if (lot != null)
                        result[index++] = lot;
                } while (cursor.moveToNext());
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            }
        }
    } catch (SQLiteException e) {
        e.printStackTrace();
    } finally {
        if (cursor != null)
            cursor.close();
    }
    ...
    ...
    return result;
}

更新:

我發現可以通過發布訪問另一個日志

logcat -b events

當應用程序崩潰時,只有一個條目

I/am_proc_died(   59): [11473,com.example.app] 

當應用程序退出時,此日志顯示一組條目:

I/am_finish_activity(   59): [1157978656,22,com.example.app/.MainActivity,app-request]
I/am_pause_activity(   59): [1157978656,com.example.app/.MainActivity]
I/am_on_paused_called(11473): com.example.app.MainActivity
I/am_destroy_activity(   59): [1157978656,22,com.example.app/.MainActivity] 

我要更改自動搜索功能。 即,如果用戶沒有按下鍵約1/2秒,則僅執行搜索。

如果您正在快速鍵入,那么此功能將在其自身之上執行多次,然后結果甚至能夠返回。 同時,你可能有太多的光標資源一次性導致應用程序完全失敗。


更新 如果你考慮它,連續快速鍵入10個鍵可能意味着你有10個不同的查詢執行和解析結果......如果它旋轉多個線程,實際上調用getLotList方法的代碼肯定會有一些死鎖問題嘗試更新UI。 這可能會導致一些程序只是放棄不知道該做什么的鬼,甚至不知道要報告問題的線程。

當然,從我們的小片段中很難說出這一切。

暫無
暫無

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

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