Android 通知服务-onCreate()之前的活动无法使用系统服务

Android 通知服务-onCreate()之前的活动无法使用系统服务,android,service,Android,Service,我有一个活动和一个服务,我想从服务调用位于活动中的方法 方法(deleteItem)使用通知服务取消某些通知,但由于它,我得到了错误: E/AndroidRuntime(13172):java.lang.IllegalStateException:onCreate()之前的活动无法使用系统服务。 main活动: public boolean deleteItem(SQLiteDatabase db, long id) { if(db.delete(DbHelper.TABLE_NAME,

我有一个活动和一个服务,我想从服务调用位于活动中的方法

方法(
deleteItem
)使用通知服务取消某些通知,但由于它,我得到了错误:

E/AndroidRuntime(13172):java.lang.IllegalStateException:onCreate()之前的活动无法使用系统服务。

main活动:

public boolean deleteItem(SQLiteDatabase db, long id) {
    if(db.delete(DbHelper.TABLE_NAME, "`_id` = " + id, null) == 1) {
            Log.i(TAG, "Item #"+id + " was deleted successfully!");

            ((NotificationManager) getSystemService(NOTIFICATION_SERVICE)).cancel((int) id);

            return true;
        }
    return false;
}
@Override
protected void onHandleIntent(Intent intent) {
    SQLiteDatabase db = dbHelper.getWritableDatabase();
    id = intent.getIntExtra("id", -1);
    MainActivity main = new MainActivity();
    main.deleteItem(db, id, false);

}
服务:

public boolean deleteItem(SQLiteDatabase db, long id) {
    if(db.delete(DbHelper.TABLE_NAME, "`_id` = " + id, null) == 1) {
            Log.i(TAG, "Item #"+id + " was deleted successfully!");

            ((NotificationManager) getSystemService(NOTIFICATION_SERVICE)).cancel((int) id);

            return true;
        }
    return false;
}
@Override
protected void onHandleIntent(Intent intent) {
    SQLiteDatabase db = dbHelper.getWritableDatabase();
    id = intent.getIntExtra("id", -1);
    MainActivity main = new MainActivity();
    main.deleteItem(db, id, false);

}
如何解决错误

MainActivity main = new MainActivity();
实例化活动是android框架的工作。请不要这样做


从服务本身调用该方法。为什么它甚至需要出现在活动中?

因为我在活动和服务中使用它,我想保存一些代码,而不是在两个地方编写相同的方法。所以你建议在服务中编写相同的方法?不,我完全赞成重用,但这被称为错误的方法。编写一个DAO来处理delete()调用。您始终可以从应用程序上下文或活动上下文获取通知服务。这与数据库操作无关。