在活动之间传递类的实例

时间:2012-03-07 14:00:35

标签: android multithreading android-activity android-intent

如果我得到了A级和B级,A级就像一个带有2个按钮的菜单,用于连接一个登录。当我按连接时,我运行这个方法:

    private void connect(){
    Thread t1 = new Thread(){
        public void run(){
    connection_class = new ConnectionClass();
    connection_class.run();
        }
    };t1.start();
}

调用我的ConnectionClass,它在构造函数中执行此操作:

    public ConnectionClass(){
        socket = new Socket("address", port);
        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
}

很好地连接到服务器并按下登录(没有onClick的东西):

        connection_class.MethodToWriteToServer("CommandThatLogsMeIn");     
        Intent i = new Intent().setClass(v.getContext(), Class.class);          
        startActivity(i);

这样可以正常工作但是当我在B类中时,我想使用它的相同实例。我可以做一个新的线程和类的实例,但这会破坏开始菜单的目的,并要求我再次登录。

以某种方式是否可以在启动时将实例作为参数传递给活动,或者以什么方式执行操作?

作为旁注,我真的不需要菜单,但是在作业到期之前我已经有了一些空余时间并且认为我也可以尝试它。

2 个答案:

答案 0 :(得分:2)

我昨天刚刚完成了这样的项目。

例如,您有一个名为WebService的连接管理器:

// singleton class
public class WebService {

    private static WebService instance;

    private WebService() {}

    public static WebService getInstance() {
        if (instance == null)
            instance = new WebService();
        return instance;
    }// getInstance()

    public void login() {};
    public void getFeeds() {};
    public void logout() {};
}

然后你可以把它放在这样的基础活动中:

public class WebServiceActivity extends Activity {

    private final WebService fWebService = WebService.getInstance();

    protected WebService ws() { return fWebService; }
}

然后,您有两项活动,LoginActivityWorkingActivity

public class LoginActivity extends WebServiceActivity {

    buttonLogin.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            try {
                ws().login();

                // start WorkingActivity if logging in ok
            } catch (...) { ... }
        }
    });
}

public class WorkingActivity extends WebServiceActivity {

    buttonGetFeeds.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            ws().getFeeds();
        }
    });

    buttonLogout.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            ws().logout();
            finish();
        }
    });
}

无论如何,有很多方法。上面的那个是我的。希望它能帮到你: - )

答案 1 :(得分:1)

我仍然不确定这是否正确。但我更喜欢使用类的静态实例:

// Create this class just once
public class MediaManager {
    public static MediaManager instance;

    public MediaManager() {
        instance = this;
    }

    public void addNewImage(Bitmap bitmap) {
          //....
    }
}

//

public class AnotherClass {
      public void doSomething() {
          MediaManager.instance.addNewImage(..);
      }
}

如果有人知道更好的使用经理类的方法,请发表评论。