(1)从活动中,我可以调用我的IntentService的特定方法(操作)吗?使用下面的示例代码,我想只调用ACTION_BAZ:
public class MyIntentService extends IntentService {
private static final String ACTION_FOO = "com.example.application.action.FOO";
private static final String ACTION_BAZ = "com.example.application.action.BAZ";
private static final String EXTRA_PARAM1 = "com.example.application.extra.PARAM1";
private static final String EXTRA_PARAM2 = "com.example.application.extra.PARAM2";
public static void startActionFoo(Context context, String param1,
String param2) {
Intent intent = new Intent(context, MyIntentService.class);
intent.setAction(ACTION_FOO);
intent.putExtra(EXTRA_PARAM1, param1);
intent.putExtra(EXTRA_PARAM2, param2);
context.startService(intent);
}
public static void startActionBaz(Context context, String param1,
String param2) {
// pretty much identical
}
public MyIntentService() {
super("MyIntentService");
}
@Override
protected void onHandleIntent(Intent intent) {
if (intent != null) {
final String action = intent.getAction();
if (ACTION_FOO.equals(action)) {
final String param1 = intent.getStringExtra(EXTRA_PARAM1);
final String param2 = intent.getStringExtra(EXTRA_PARAM2);
handleActionFoo(param1, param2);
} else if (ACTION_BAZ.equals(action)) {
final String param1 = intent.getStringExtra(EXTRA_PARAM1);
final String param2 = intent.getStringExtra(EXTRA_PARAM2);
handleActionBaz(param1, param2);
}
}
}
private void handleActionFoo(String param1, String param2) {
// populates sqldatabase tables from asset .csv file
}
private void handleActionBaz(String param1, String param2) {
// compliments onUpgrade database action by dropping tables in ActionFoo
}
}
(2)从我的活动开始,我可以/应该打电话吗?
public void onCreate(SQLiteDatabase db)
{
db.execSQL(SQL_CREATE_TABLE);
// Starts MyIntentService queue for populating Table
final Context svccontext = svccontext.getApplicationContext();
final Intent intent = new Intent(svccontext, MyIntentService.class);
intent.setAction(ACTION_FOO);
svccontext.startService(intent);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// the same as above, but calls method to drop tables
intent.setAction(ACTION_BAZ);
}
但是,我是不是在调用带有参数param1和param2的方法的问题,这些参数是在(1)的IntentService的Method(action)中指定的?
(3)最后,在Google (deveoper.android.com)提供的示例代码中,我的IntentService是否总是按顺序启动两个方法(操作)Foo和Baz?如果我完全离开,请纠正我的理解......
我的意思是调用myIntentService作为后台服务来执行不会延迟UI的数据库函数。我可能有
ActionFoo从资产.csv文件中填充我的MainActivity创建的表格。
在我的MainActivity的onUpgrade调用中,ActionBaz可以删除上述表格。
用户仍然可以在用户定义的表格中手动输入数据,而后台可以处理资产填充表格。
所以我的第三个问题是:对myIntentService的所有调用是否都会执行ActionFoo(填充表)和ActionBaz(从而删除我刚创建的表)?或者我的onHandleIntent会确保只对指定的Action(添加到intent)执行操作吗?
如果我必须在我的Activity中明确提到intent的setAction和参数,那么我的IntentService的帮助方法(即startActionFoo)有什么帮助?无论如何,它们都必须被重新定义为调用活动。
答案 0 :(得分:0)
从活动中,我可以调用我的IntentService的特定方法(操作)吗?
动作与方法没有直接关系。欢迎您在明确的Intent
中包含一个操作字符串,就像您在第一段示例代码中所做的那样。
从我的活动中,我可以打电话吗?
不,因为那不是有效的Java。它不会编译,因为startActionBaz()
会返回void
。
我的IntentService会不会按顺序启动两个方法(操作)Foo和Baz?
没有" Foo"在您的源代码中。