رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل متوقف شدن برنامه در بعضی از گوشی ها
#1
سلام
من برنامه ام رو، روی چند گوشی امتحان کردم مشکلی نداشت.
اما روی یک گوشی هوآوی و تبلت سامسونگ نوت 10 امتحان کردم تا برنامه رو میخواد بیاره بالا میگه متوقف شد.
و اینکه گوشی ها موجود نیستند که با اندروید استودیو تست کنم.

و اینکه کلا برنامه میخواد بیاد بالا چند ثانیه ای طول میکشه، کلا حجم برنامه 3.24mb هست و دیتابیسم 595kb هست.
پوشه drawable هم 1.40 مگ هست.
پاسخ
تشکر شده توسط:
#2
گوشی‌هایی که تست کردین اندروید 6 هم بینشون بوده؟ شاید بخاطر تغییر مکانیسم مجوزها در اندروید 6 باشه. این تاپیک رو بخونید: پرمیشن ها در اندروید 6
پاسخ
تشکر شده توسط: af94
#3
اونایی که متوقف میشدند اندروید 4.4.4 بودند.
روی اندروید 6 مشکلی نداشته تا حالا.

گوشی خودم و چندتا دیگه اندروید 6 بود مشکلی نبوده
پاسخ
تشکر شده توسط:
#4
بهترین کار اینه که لاگ‌کت رو بررسی کنید. یه جدول در دیتابیس برنامه برای لاگ بسازین و موقع کرش‌کردن برنامه، جزئیات لاگ‌کت رو داخلش ذخیره کنین. برای اینکه کنترل‌کننده‌ی خطا رو از حالت پیشفرض اندروید تغییر بدین، یک کلاس 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;
    }
}
پاسخ
تشکر شده توسط: alirezaey




کاربران در حال بازدید این موضوع: 2 مهمان