1

如果我onReceive()只用一个简单的 toast 运行我的方法,我的应用程序就会运行。但是当我尝试执行一个循环然后显示一个 toast 时,我的程序崩溃了。有没有说我不能在onReceive()方法中执行循环?

  @Override
        public void onReceive(Context ctx, Intent intent) {
            DBAdapter havetododb = new DBAdapter(ctx);
            Cursor cursor = havetododb.fetchAllItems();
            if (cursor.moveToFirst()) {
                do {
                    String title = cursor.getString(cursor.getColumnIndex("item"));
                    Toast.makeText(ctx, title, Toast.LENGTH_LONG).show();
    } while (cursor.moveToNext());
    }
    cursor.close();
}

我试图在我的 logcat 中搜索错误,但它似乎是空的。

4

1 回答 1

1

您可以运行任何代码,但如果您在主线程上运行的时间过长(我认为是 10 秒,但这取决于哪个版本),您将收到应用程序无响应 (ANR) 中断,并且您会被杀死。不过,这应该会显示在日志中。用一个可以捕获所有内容的 try/catch 包围你的代码,看看你得到了什么。

如果您的时间用完了,[IntentService]/http://developer.android.com/reference/android/app/IntentService.html) 将为您提供帮助。在AsyncTask中执行也可能足够,但这样可以减少让您的进程保持活力的努力。

于 2012-10-19T10:04:37.567 回答