我是一个android新手,我试图为我的应用程序找到一个好的结构,但我不知道如何做到这一点。
我只有一个活动和一个页面来收集信息并对其进行处理(将其推送到api、计算等)。但我只是不想把所有的东西都放在MainActivity.java
中,因为它会变成一个长文件,有这么多函数。所以我希望能够从MainActivity.java
调用这些函数,并在其他类中执行它们。
是否有具体的名称或方法?如果我为同一个主活动创建一个新的类来执行从那里调用的函数,并保持MainActivity.java
简洁,我将扩展哪个类
最佳答案
你可以阅读一些关于mvc或mvp的知识。简言之,尝试将ui模块与逻辑模块分开。有一些常见的方法可供参考:
将公共api编写到***Util.java
(使用静态函数),例如:FileUtil.java
是一个处理文件管理的工具类,您可以编写
公共静态void savefile(字符串路径)
公共静态void deletefile(字符串路径)
公共静态void savejpeg(字符串路径,位图b)
公共静态void delallfiles(字符串文件夹)
等等。
您可以编写PreferenceUtil.java
来处理android首选项管理。
如果许多活动具有相同的功能,则需要使用。例如:showWaitingDialog()
。然后您可以编写一个BaseActivity.java
,并在其中实现showWaitingDialog()
。
有时需要使用SinglePattern
来实现代码。例如,您希望有一个User.java
来管理所有用户事务,包括登录、注销、检查是否登录。确定何时使用SinglePattern
,如果您的User.java
必须在许多活动中使用,并且您的内存中必须只有一个实例。
下面是一个例子,LocationManager.java
是由SinglePattern
编写的。在我的应用程序中,许多活动都需要呼叫定位模块,而且必须是一个实例。
public class LocationManager implements AMapLocationListener {
public interface OnLocationCallback{
public void onLocateSuccess(double lng, double lat, String addr);
public void onLocateFail(int code, String info);
}
private static volatile LocationManager mInstance = null;
private Context context;
public AMapLocationClient mLocationClient = null;
private OnLocationCallback mCallback;
private LocationManager(Context context){
this.context = context;
init(this.context);
}
public static LocationManager getInstance(Context context){
if(mInstance == null){
synchronized (LocationManager.class){
if(mInstance == null){
mInstance = new LocationManager(context);
}
}
}
return mInstance;
}
private void init(Context context){
mLocationClient = new AMapLocationClient(context);
mLocationClient.setLocationListener(this);
initLocationParams();
}
private void initLocationParams(){
AMapLocationClientOption mLocationOption = null;
mLocationOption = new AMapLocationClientOption();
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
mLocationOption.setNeedAddress(true);
mLocationOption.setOnceLocation(true);
mLocationOption.setWifiActiveScan(true);
mLocationOption.setMockEnable(false);
mLocationOption.setInterval(2000);
mLocationClient.setLocationOption(mLocationOption);
}
public void startLocation(OnLocationCallback callback){
this.mCallback = callback;
mLocationClient.startLocation();
}
public void stopLocation(){
this.mCallback = null;
mLocationClient.stopLocation();
}
@Override
public void onLocationChanged(AMapLocation amapLocation) {
if (amapLocation != null) {
if (amapLocation.getErrorCode() == 0) {
amapLocation.getLocationType();
amapLocation.getLatitude();
amapLocation.getLongitude();
amapLocation.getAccuracy();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(amapLocation.getTime());
df.format(date);
amapLocation.getAddress();
amapLocation.getCountry();
amapLocation.getProvince();
amapLocation.getCity();
amapLocation.getDistrict();
amapLocation.getRoad();
amapLocation.getCityCode();
amapLocation.getAdCode();
if(mCallback != null){
mCallback.onLocateSuccess(amapLocation.getLongitude(), amapLocation.getLatitude(), amapLocation.getAddress());
}
} else {
Log.e("AmapError", "location Error, ErrCode:"
+ amapLocation.getErrorCode() + ", errInfo:"
+ amapLocation.getErrorInfo());
if(mCallback != null){
mCallback.onLocateFail(amapLocation.getErrorCode(), amapLocation.getErrorInfo());
}
}
}
}
}
呼叫:
LocationManager.getInstance(getApplicationContext()).startLocation(new LocationManager.OnLocationCallback(){})
在某些情况下,您可以编写一个
***Manager.java
类来实现一些逻辑内容。正如您所提到的,然后您可以编写Calculations
实现CalculationManager
。下面是一些示例代码:icalculateinterface.java:
public interface ICalculateInterface {
int add(int a, int b);
int sub(int a, int b);
}
计算器管理器.java
public class CalculateManager implements ICalculateInterface {
@Override
public int add(int a, int b) {
return 0;
}
@Override
public int sub(int a, int b) {
return 0;
}
}
关于java - Android结构:一项 Activity 有两个类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37908396/