12 QAndroidJniEnvironment env;
13 QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod(
"org/qtproject/qt5/android/QtNative",
15 "()Landroid/app/Activity;");
16 if (env->ExceptionCheck()) {
17 qWarning(
"KisAndroidExitInfo::getLast: JNI exception in activity");
18 env->ExceptionDescribe();
19 env->ExceptionClear();
21 }
else if (!activity.isValid()) {
22 qWarning(
"KisAndroidExitInfo::getLast: activity not valid");
26 QAndroidJniObject exitInfo =
27 activity.callObjectMethod(
"getLastApplicationExitInfo",
"()Landroid/app/ApplicationExitInfo;");
28 if (env->ExceptionCheck()) {
29 qWarning(
"KisAndroidExitInfo::getLast: JNI exception in getLastApplicationExitInfo");
30 env->ExceptionDescribe();
31 env->ExceptionClear();
33 }
else if (!exitInfo.isValid()) {
34 qWarning(
"KisAndroidExitInfo::getLast: exit info not valid");
38 int reasonCode = exitInfo.callMethod<jint>(
"getReason",
"()I");
39 if (env->ExceptionCheck()) {
40 qWarning(
"KisAndroidExitInfo::getLast: JNI exception in getReason");
41 env->ExceptionDescribe();
42 env->ExceptionClear();
47 if (env->ExceptionCheck()) {
48 qWarning(
"KisAndroidExitInfo::getLast: JNI exception in getStatus");
49 env->ExceptionDescribe();
50 env->ExceptionClear();
54 int importanceCode = exitInfo.callMethod<jint>(
"getImportance",
"()I");
55 if (env->ExceptionCheck()) {
56 qWarning(
"KisAndroidExitInfo::getLast: JNI exception in getImportance");
57 env->ExceptionDescribe();
58 env->ExceptionClear();
64 QAndroidJniObject descriptionObject = exitInfo.callObjectMethod(
"getDescription",
"()Ljava/lang/String;");
65 if (env->ExceptionCheck()) {
66 qWarning(
"KisAndroidExitInfo::getLast: JNI exception in getDescription");
67 env->ExceptionDescribe();
68 env->ExceptionClear();
69 }
else if (descriptionObject.isValid()) {
105 message.append(QStringLiteral(
"reason %1").arg(
m_reasonCode));
108 message.append(QStringLiteral(
" (UNKNOWN)"));
111 message.append(QStringLiteral(
" (EXIT_SELF)"));
114 message.append(QStringLiteral(
" (SIGNALED)"));
117 message.append(QStringLiteral(
" (LOW_MEMORY)"));
120 message.append(QStringLiteral(
" (CRASH)"));
123 message.append(QStringLiteral(
" (CRASH_NATIVE)"));
126 message.append(QStringLiteral(
" (ANR)"));
129 message.append(QStringLiteral(
" (INITIALIZATION_FAILURE)"));
132 message.append(QStringLiteral(
" (PERMISSION_CHANGE)"));
135 message.append(QStringLiteral(
" (EXCESSIVE_RESOURCE_USAGE)"));
138 message.append(QStringLiteral(
" (USER_REQUESTED)"));
141 message.append(QStringLiteral(
" (USER_STOPPED)"));
144 message.append(QStringLiteral(
" (DEPENDENCY_DIED)"));
147 message.append(QStringLiteral(
" (OTHER)"));
150 message.append(QStringLiteral(
" (FREEZER)"));
153 message.append(QStringLiteral(
" (PACKAGE_STATE_CHANGE)"));
156 message.append(QStringLiteral(
" (PACKAGE_UPDATED)"));
165 message.append(QStringLiteral(
" (FOREGROUND)"));
168 message.append(QStringLiteral(
" (FOREGROUND_SERVICE)"));
171 message.append(QStringLiteral(
" (PERCEPTIBLE_PRE_26)"));
174 message.append(QStringLiteral(
" (TOP_SLEEPING_PRE_28)"));
177 message.append(QStringLiteral(
" (VISIBLE)"));
180 message.append(QStringLiteral(
" (PERCEPTIBLE)"));
183 message.append(QStringLiteral(
" (SERVICE)"));
186 message.append(QStringLiteral(
" (TOP_SLEEPING)"));
189 message.append(QStringLiteral(
" (CANT_SAVE_STATE)"));
192 message.append(QStringLiteral(
" (CACHED)"));
195 message.append(QStringLiteral(
" (EMPTY)"));
198 message.append(QStringLiteral(
" (GONE)"));
206 message.append(QStringLiteral(
", low-memory kill report "));
208 message.append(QStringLiteral(
"supported"));
210 message.append(QStringLiteral(
"not supported"));
214 message.append(QStringLiteral(
", no description"));
216 message.append(QStringLiteral(
", description '%1'").arg(
m_description));