我想在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 ......