大家好,又见面了,我是全栈君。
假设你一年前写的代码 , 在如今看来你还感觉写的非常不错 , 那么说明你学习的不够多.
public class MainActivity extends LocationManagingActivity implements ActionBar.OnNavigationListener, GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener {
//...
private static MeTrackerStore mMeTrackerStore;
//...
@Override
protected void onCreate(Bundle savedInstanceState) {
//...
mMeTrackerStore = new MeTrackerStore(this);
}
}
这个毛病可能非常多人都会犯过 , 假设MeTrackerStore
通过构造持有activity
的引用 , 那这个activity
就永远不会被垃圾回收.(除非静态变量被又一次分配至不同的activity
)
这是由于MeTrackerStore
是静态的 , 而对于静态变量的存储, 当应用程序启动 , 不收集 , 知道退出该应用程序正在执行的进程 .
注: 从技术层面来说 , 你能够持有一个静态应用的 application context
, 这样不会造成内存泄露 , 但不建议这么做
public class DefineGeofenceFragment extends Fragment {
public class GetLatAndLongAndUpdateMapCameraAsyncTask extends AsyncTask<String, Void, LatLng> {
@Override
protected LatLng doInBackground(String... params) {
//...
try {
//Here we make the http request for the place search suggestions
httpResponse = httpClient.execute(httpPost);
HttpEntity entity = httpResponse.getEntity();
inputStream = entity.getContent();
//..
}
}
}
}
这段代码有非常多问题 , 我们把终点放在隐式引用 . 在Java中 , 对于包括静态内部类的类 , 非静态内部类具有隐式引用. 本段代码中 , 对与外部类DefineGeofenceFragment 将持有一个 GetLatAndLongAndUpdateMapCameraAsyncTask 引用 对与包括内部类的外部类来说 , 他们有一个隐含的引用包括匿名类的类的实例 , 该GetLatAndLongAndUpdateMapCameraAsyncTask 有一个隐含的引用片段
1. Google 广播 (http://fragmentedpodcast.com/episodes/9/) , 告诉你什么情况 使用什么库 , 比如 Dagger Retrofit Picasso 和 Mockito
2. 订阅Android周刊 . 他们会给你推送最新的第三方库或比較最新 , 近期比較流行的设计模式及功能.
3. 寻找开源码的应用 去解决相似你须要的功能或模块. 这个应用可能会用到你不知道的第三方库.
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/115653.html原文链接:https://javaforall.cn