تالار گفتمان nCIS.ir

نسخه‌ی کامل: مشکل متوقف شدن برنامه در بعضی از گوشی ها
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام
من برنامه ام رو، روی چند گوشی امتحان کردم مشکلی نداشت.
اما روی یک گوشی هوآوی و تبلت سامسونگ نوت 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;
    }
}