【发布时间】:2015-08-06 06:42:34
【问题描述】:
所以我在我的应用中注册了一个 BroadcastReceiver,一旦触发就会启动一个服务。
Service 类方法在被调用时会显示一个 Toast,在测试之后确实会显示。
但是如果应用没有运行/被销毁,如果传递到Toast.makeText(Context context, CharSequence text, int duration) 的上下文是一个从未实例化的上下文,那么 Toast 怎么可能被显示?
我的意思是,应用程序没有运行/被销毁,所以上下文变量从未初始化。
主要活动:
public class MapsActivity extends FragmentActivity {
MyBroadcastReceiver mBroadcastReceiver = new MyBroadcastReceiver();
@Override
protected void onCreate(Bundle savedInstanceState) {
// Some code here.
// Instantiate the context.
context = MapsActivity.this;
registerReceiver(mBroadcastReceiver, new IntentFilter());
}
}
广播接收器
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
MapsActivity.context.startService(new Intent(context, MyService.class));
}
}
}
服务
public class MyService extends Service {
@Override
public void onCreate() {
Toast.makeText(MapsActivity.context, "Service onCreate", Toast.LENGTH_LONG).show();
}
// Some other super methods.
}
【问题讨论】:
-
我不明白你的问题。您的吐司是否显示,您不知道为什么?您的吐司是否没有显示,但您希望显示?还有什么?
-
我的 Toast 显示出来了,我不知道为什么,因为传递给参数的上下文为空?
-
是吗?上下文是否为空?你是怎么测试的?
-
提示:如果收到广播,那么它就被注册了,那么你的上下文确实被初始化了。如果您的应用程序已完全终止,您将不会收到广播。但是,拥有静态上下文确实是一个非常糟糕的主意。由于 Service 也是一个上下文,因此请使用它而不是您的活动的上下文。
-
我实际上没有。但是为什么上下文不为空?服务是否随时调用活动 onCreate?我只是想了解一下,以便了解其背后的逻辑。
标签: android service broadcastreceiver toast