سلام
من برنامه ام رو، روی چند گوشی امتحان کردم مشکلی نداشت.
اما روی یک گوشی هوآوی و تبلت سامسونگ نوت 10 امتحان کردم تا برنامه رو میخواد بیاره بالا میگه متوقف شد.
و اینکه گوشی ها موجود نیستند که با اندروید استودیو تست کنم.
و اینکه کلا برنامه میخواد بیاد بالا چند ثانیه ای طول میکشه، کلا حجم برنامه 3.24mb هست و دیتابیسم 595kb هست.
پوشه drawable هم 1.40 مگ هست.
گوشیهایی که تست کردین اندروید 6 هم بینشون بوده؟ شاید بخاطر تغییر مکانیسم مجوزها در اندروید 6 باشه. این تاپیک رو بخونید:
پرمیشن ها در اندروید 6
اونایی که متوقف میشدند اندروید 4.4.4 بودند.
روی اندروید 6 مشکلی نداشته تا حالا.
گوشی خودم و چندتا دیگه اندروید 6 بود مشکلی نبوده
بهترین کار اینه که لاگکت رو بررسی کنید. یه جدول در دیتابیس برنامه برای لاگ بسازین و موقع کرشکردن برنامه، جزئیات لاگکت رو داخلش ذخیره کنین. برای اینکه کنترلکنندهی خطا رو از حالت پیشفرض اندروید تغییر بدین، یک کلاس App بسازین و از Application مشتق کنید و توی مانیفست هم در قسمت android:name از تگ application این کلاس رو معرفی کنید. حالا این کد رو توی onCreate بنویسید:
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable e) {
StackTraceElement[] stackTrace = e.getStackTrace();
for (StackTraceElement error : stackTrace) {
StructLog log = new StructLog();
log.log_file = error.getFileName();
log.log_class = error.getClassName();
log.log_method = error.getMethodName();
log.log_line = "" + error.getLineNumber();
log.log_message = error.toString();
DbLog.insert(log);
}
System.exit(0);
}
});
کد کلاس StructLog:
public class StructLog {
public int id;
public String log_file;
public String log_class;
public String log_method;
public String log_line;
public String log_message;
}
و همچنین کد کلاس DbLog:
public class DbLog {
public static void clear() {
App.db.execSQL("DELETE FROM logs");
}
public static void insert(StructLog log) {
App.db.execSQL("INSERT INTO logs (id, log_file, log_class, log_method, log_line, log_message) VALUES (NULL,?,?,?,?)", new String[]{log.log_file, log.log_class, log.log_method, log.log_line, log.log_message});
}
public static ArrayList<StructLog> all() {
ArrayList<StructLog> result = new ArrayList<>();
Cursor cursor = App.db.rawQuery("SELECT * FROM logs ORDER BY id DESC", null);
while (cursor.moveToNext()) {
result.add(extract(cursor));
}
cursor.close();
return result;
}
public static StructLog one(int id) {
Cursor cursor = App.db.rawQuery("SELECT * FROM logs WHERE id=?", new String[]{"" + id});
if (!cursor.moveToNext()) {
return null;
}
StructLog result = extract(cursor);
cursor.close();
return result;
}
private static StructLog extract(Cursor cursor) {
StructLog result = new StructLog();
result.id = cursor.getInt(cursor.getColumnIndex("id"));
result.log_file = cursor.getString(cursor.getColumnIndex("log_file"));
result.log_class = cursor.getString(cursor.getColumnIndex("log_class"));
result.log_method = cursor.getString(cursor.getColumnIndex("log_method"));
result.log_line = cursor.getString(cursor.getColumnIndex("log_line"));
result.log_message = cursor.getString(cursor.getColumnIndex("log_message"));
return result;
}
}