startActivityForResult()
仅在真正的屏幕活动中才可用,因为它是Activity类的方法。请重新设计您的应用程序,使用户界面由活动驱动。
另一方面,如果您的非Activity类是从屏幕上的Activity中初始化和使用的,则可以将该Activity实例作为参数传递给您的类构造函数,并使用它来启动其他Activity。
但要小心。使用这种方法会增加内存泄漏的风险,因为外部类(例如我的Utils)可能会保留对Activity的引用,即使Activity已经消失。
如果您只想访问数据,则可以尝试将其写入SharedPreferences或数据库或某些文件,然后使用应用程序上下文(再次通过构造函数传递)来读取它。这可以减少内存泄漏的风险,例如:
MyApiClass myApiClass = new MyApiClass(getApplicationContext());
示例代码
主活动:
public class Main extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Utils util = new Utils(this);
util.startTest();
}
@Override
protected void onActivityResult(int arg0, int arg1, Intent arg2) {
Toast.makeText(this, "onActivityResult called", Toast.LENGTH_LONG).show();
super.onActivityResult(arg0, arg1, arg2);
}
}
Utils类(用于启动结果):
public class Utils {
Activity activity;
public Utils(Activity ac) {
activity = ac;
}
public void startTest() {
Intent i = new Intent(activity, Test.class);
activity.startActivityForResult(i, 1);
}
}
测试活动:
public class Test extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Toast.makeText(this, "Test", Toast.LENGTH_LONG).show();
this.setResult(Activity.RESULT_OK);
this.finish();
}
}