Android 将活动实例传递给类可以吗?
在一个场景中,我需要将活动及其按钮传递给java类 我做到了以下几点,而且效果很好,我只关心它是否是整合这一点的正确方式 main活动Android 将活动实例传递给类可以吗?,android,performance,android-layout,Android,Performance,Android Layout,在一个场景中,我需要将活动及其按钮传递给java类 我做到了以下几点,而且效果很好,我只关心它是否是整合这一点的正确方式 main活动 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button= findViewById(R.id.btn)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button= findViewById(R.id.btn);
UIComponents uiComponents= new UIComponents();
uiComponents.setActivity(this, button);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d("result", String.valueOf(requestCode));
}
UIComponents.class
public class UIComponents {
public void setActivity(final AppCompatActivity activity, Button btn){
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent= new Intent(activity, ResultActivity.class);
activity.startActivityForResult(intent, 999);
}
});
}
这工作得非常好,它在我的活动屏幕上显示
toast
消息,并且我能够收到活动结果的onActivityResult
回调。我担心这是否会导致任何与性能相关的问题。您只需按下按钮,然后使用可用的getContext方法,例如
public class UIComponents {
public void setActivity(Button btn){
Context activity = btn.getContext();
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent= new Intent(activity, ResultActivity.class);
activity.startActivityForResult(intent, 999);
}
});
}
<> P>这里考虑的最重要的事情是组件的生命周期。一般来说,您不应该将对活动的引用传递给任何可能比它更长寿的对象。从理论上讲(可能在后面),从用户单击按钮到执行
OnClickListener
(如果它还没有被垃圾收集)之间,您的活动可能会被终止,您将得到NullPointerException
。此外,您可能会(甚至意外地)将UIComponents传递给具有不同生命周期的其他对象
这种情况下的最佳实践通常是使用体系结构。除其他地方外,还介绍了处理按钮点击的具体情况
此外,遵循Google的“”可能是个好主意。谢谢@SirCodesalot,我还在界面中添加了另一个方法,名为
clearData
,我在活动的onDestory()中调用它,它将活动和按钮引用设置为null
。我在我的应用程序中使用MVP模式,但我这样做是为了单点登录。很高兴提供帮助。您不应该依赖onDestroy,因为它通常不会被调用。请看这里: