我目前正在开发一个android项目,并且我有一个活动,可以称之为MyActivity,并且此活动调用一个名为MyClass的标准Java类。完成标准java类的活动
我需要MyClass的完成MyActivity活动,但我不能找出如何做到这一点。我想我可能能够将上下文传递给标准java类并调用context.finish(),但这似乎不可用。
我该如何做到这一点,感谢您提供的任何帮助。
我目前正在开发一个android项目,并且我有一个活动,可以称之为MyActivity,并且此活动调用一个名为MyClass的标准Java类。完成标准java类的活动
我需要MyClass的完成MyActivity活动,但我不能找出如何做到这一点。我想我可能能够将上下文传递给标准java类并调用context.finish(),但这似乎不可用。
我该如何做到这一点,感谢您提供的任何帮助。
您可以通过Context
,但你需要将其转换为Activity
(或者只是通过Activity
本身),虽然这在一般的似乎是一个不好的做法。
传递MyActivity
到MyClass
为Activity
。从那里,你可以拨打myActivity.finish();
例如:
private Activity myActivity;
public MyClass(Activity myActivity){
this.myActivity = myActivity;
}
public void stopMyActivity(){
myActivity.finish();
}
而且在MyActivity
:
MyClass myClass = new MyClass(this);
这是有风险的,因为你持有一个参考的Activity
,这可能会导致内存泄漏。
如果你的java类是一个嵌套的内部类,你可以使用:
public class MyActivity extends Activity {
public static class JavaClass {
public void finishActivity() {
MyActivity.finish();
}
}
}
否则,你就必须通过Java类中的Context
(即它传递给this
一个参考,因为Activity extends Context
)和将其存储为私有实例变量。
最安全的解决方案使用监听器和Handler。这很复杂,但确保不直接致电完成活动。
你的听众:
interface OnWantToCloseListener{
public void onWantToClose();
}
类应关闭活动。
class MyClass {
private OnWantToCloseListener listener;
public void setWantToCloseListener(OnWantToCloseListener listener){
this.listener = listener;
}
private void fireOnWantToClose(){
if(this.listener != null)
listener.onWantToClose();
}
}
当你想关闭你的活动,你必须调用fireOnWantToClose()方法。
public MyActivity extends Activity{
public void onCreate(){
final int CLOSE = 1; //number to identify what happens
MyClass my_class = new MyClass();
final Handler handler = new Handler(){
public void handleMessage(Message msg){
if(msg.what == CLOSE)
MyActivity.this.finish();
}
});
my_class.setOnWantToCloseListener(new OnWantToCloseListener(){
public void onWantToClose(){
handler.sendEmptyMessage(CLOSE);
}
});
}
}
这是安全的,因为活动不是由MyClass的对象直接完成,它是通过订单处理程序,完成活动的监听器完成。即使您在第二个线程上运行MyClass对象,此代码也可以很好地工作。
编辑:关闭var添加我忘了声明并初始化它。
+1因泄漏问题 – gobernador