Java 如何从非活动类开始活动并等待它完成?
我正在开发一个Android库,它启动了自己的活动。我需要让库的方法同步工作,这意味着我要等到启动的活动完成,然后返回一个值。我怎么做?我尝试了不同的方法,但似乎什么都做不了 这是图书馆开始活动的方法:Java 如何从非活动类开始活动并等待它完成?,java,android,android-activity,synchronized,Java,Android,Android Activity,Synchronized,我正在开发一个Android库,它启动了自己的活动。我需要让库的方法同步工作,这意味着我要等到启动的活动完成,然后返回一个值。我怎么做?我尝试了不同的方法,但似乎什么都做不了 这是图书馆开始活动的方法: @Override public Response admin(TypeEnumeration type) { Intent i = new Intent(context, NewActivity.class); i.setFlags(Intent
@Override
public Response admin(TypeEnumeration type) {
Intent i = new Intent(context, NewActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("type", type.value());
context.startActivity(i);
Response response = NewActivity.getResponse();
return response;
}
活动从用户的交互开始许多不同的片段并等待
我不希望使用active waiting forNewActivity.getResponse()
不为null。我尝试添加一个额外的对象来对其使用wait()
/notyfy()
,但是活动根本没有启动
任何提示都将不胜感激!
感谢最常见的场景(听起来就是你的场景)是使用子活动获取用户输入-例如从列表中选择联系人或在对话框中输入数据。在这种情况下,您应该使用startActivityForResult启动子活动
Intent resultIntent = new Intent();
// TODO Add extras or a data URI to this intent as appropriate.
resultIntent.putExtra("some_key", "String data");
setResult(Activity.RESULT_OK, resultIntent);
finish();
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) {
case (MY_CHILD_ACTIVITY) : {
if (resultCode == Activity.RESULT_OK) {
// TODO Extract the data returned from the child Activity.
String returnValue = data.getStringExtra("some_key");
}
break;
}
}
}
这提供了一个使用setResult将数据发送回主活动的管道。setResult方法接受一个int result值和一个传递回调用活动的意图
Intent resultIntent = new Intent();
// TODO Add extras or a data URI to this intent as appropriate.
resultIntent.putExtra("some_key", "String data");
setResult(Activity.RESULT_OK, resultIntent);
finish();
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) {
case (MY_CHILD_ACTIVITY) : {
if (resultCode == Activity.RESULT_OK) {
// TODO Extract the data returned from the child Activity.
String returnValue = data.getStringExtra("some_key");
}
break;
}
}
}
访问调用Activity override onActivityResult中返回的数据。requestCode对应于startActivityForResult调用中传入的整数,而resultCode和数据意图则从子活动返回
Intent resultIntent = new Intent();
// TODO Add extras or a data URI to this intent as appropriate.
resultIntent.putExtra("some_key", "String data");
setResult(Activity.RESULT_OK, resultIntent);
finish();
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) {
case (MY_CHILD_ACTIVITY) : {
if (resultCode == Activity.RESULT_OK) {
// TODO Extract the data returned from the child Activity.
String returnValue = data.getStringExtra("some_key");
}
break;
}
}
}
几天前,我实现了同样的事情。只需按照以下提供的步骤进行相同操作:
application.registerActivityLifecycleCallbacks(ActivityLifecycleCallbacks
回调)
背景。起始触觉(i)代码>
activity.finish()
关闭活动onActivityResumed(活动活动)
什么是响应?onActivityResult()?。。这个问题有点让人困惑。“我需要让库的方法同步工作”——为什么你们认为你们“需要”这样做?异步API(回调、侦听器、未来、RxJava风格的可观察对象等)非常常见。这是客户机的要求:他们希望调用库的方法,并在结果出来之前阻止其应用程序。使用扩展
application
类的“MyApplication”类,并在类内设置单例或字段。您可以在MyApplication类内设置状态值以检查状态和值。您可以从您希望的任何活动中获取活动的此值和状态。当我从库而不是从其他活动启动活动时,如何使用startActivityForResult
?您正在使用哪个库?我的库,我正在处理的那个,以及启动活动并等待结果的那个:)老板,我在问库名。你在用什么?上下文变量如何出现我不理解你的问题。你为什么需要我图书馆的名字?