-1

我想在Android启动时启动一个线程,所以我做了这样的事情

public class StartUpWelcomer extends BroadcastReceiver {

    @Override
    public void onReceive(Context arg0, Intent arg1) {
        // TODO Auto-generated method stub
        arg0.startService(new Intent(arg0, StartUpService.class));
    }

用我的清单:

<receiver android:name=".StartUpWelcomer">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>
<service android:enabled="true" android:name=".StartUpService" />

这是我的 StartUpService 课程

public class StartUpService extends Service {

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    public void onCreate()
    {
        BackgroundApplication application = (BackgroundApplication)this.getApplication();
        ReminderThread reminderThread = new ReminderThread(null);
        if(!reminderThread.failed)
        {
            reminderThread.start();
            application.setRunningThread(reminderThread);
            Log.d("SERVICE", "CREATION CONFIRMED");
        }
        else
        {
            Log.d("SERVICE", "CREATION CANCELLED");
        }
    }

这是 ReminderThread 类的代码

public ReminderThread(Context ctx)
{
    this.ctx = ctx;
    db = new SQLdb(ctx);
    //And there's some other code here that accessed the database functions.
}

好的,这就是我的意图......我希望 StartUpWelcome 激活 StartUpService(它正在工作)。

StartUpService 将实例化一个新线程,激活它并使其在我的应用程序(称为 BackgroundApplication 类)中保持可访问性。

这就是问题所在...... ReminderThread 实际上需要访问数据库(此处为 SQLite),因此 ReminderThread 实例化了数据库以访问它。但是,我的数据库构造函数需要一个 Context 来实例化。我不知道从哪里获得上下文(从服务类),我通常从活动类获得它......(暂时我把“null”放在那里)

另一个问题是,不知何故我发现这总是会导致 NullPointerException ......

4

1 回答 1

0

如果您在 Service 中初始化 ReminderThread,则使用new ReminderThread(getApplicationContext());Service 类中的 ApplicationContect。

于 2012-04-21T08:46:34.027 回答