如何从android上的Service调用主线程函数?

时间:2011-04-03 17:03:55

标签: android static cursor

我有Main类,它包含函数isSyncAllowed。我开始另一项服务。如何从此服务调用函数isSyncAllowed? 它说:

  

无法进行静态引用   非静态方法   从类型中isSyncAllowed(布尔)   主

如果我将该函数的类型更改为static并传递context,我会遇到startManagingCursor不能是静态的问题。

我该如何解决?

UPD。以下是 SyncService 的代码:

public class SyncService extends BroadcastReceiver {
...
    public void onReceive(Context context, Intent intent) {
    ...
    Boolean isDownloadAllowed = Kinobaza.isSyncAllowed(true);
    }

以下是 Main 的代码:

public class Kinobaza extends ListActivity {
    ...
    public static Boolean isSyncAllowed(Boolean showToasts) {
        ...
        Cursor notesCursor = mDbHelper.fetchAllNotes();
        startManagingCursor(notesCursor); // here is the error
    }
}

1 个答案:

答案 0 :(得分:1)

您可能正在Main.isSyncAllowed(...)而不是main.isSyncAllowed(...),其中main是类Main的对象。

如果您在Main的实例方法中,那么您只需执行isSyncAllowed(...)

修改 - 现在我看到了您的代码,您应该通过您提供给服务的isSyncAllowed传递Intent。当您启动服务时:

Intent intent = /* however you were constructing your intent */
boolean syncAllowed = /* calculate syncAllowed by calling your existing method */
intent.putExtra("syncAllowed", syncAllowed);
    ...

然后在您的服务中,您可以检索它:

boolean syncAllowed = getIntent().getBooleanExtra("syncAllowed", true);

您的服务不需要在您的活动中调用实例方法。