下面是安卓应用开发必须知道的事情,像Java代码怎么写,Java是安卓应用开发中最常使用的工具,下面就针对Java代码。
1. 不要持有Context的静态引用
Java代码
1. publicclassMainActivityextendsLocationManagingActivityimplementsActionBar.OnNavigationListener,
2. GooglePlayServicesClient.ConnectionCallbacks,
3. GooglePlayServicesClient.OnConnectionFailedListener{
4. //...
5. privatestaticMeTrackerStoremMeTrackerStore;
6. //...
7. @Override
8. protectedvoidonCreate(BundlesavedInstanceState){
9. //...
10. mMeTrackerStore=newMeTrackerStore(this);
11. }
12. }
这对于每个人来说看似是一个不可能犯的错误。但事实却并非如此,我犯了这个错误,我也看到过别人犯这个错误,同时我也采访过那些不能很快指出为什么这是放在第一位的错误的人。不要这样做,它是会变的。
如果MeTrackerStore通过它的构造函数保持一个指向Activity的引用,这个Activity将不会被垃圾回收(GC),除非静态变量被从新分配到不同的Activity。这是因为mMeTrackerStore是静态变量,而静态变量的内存是不会被回收,直到应用程序退出才回收。如果你正在试图做这样的事情,你的代码很有可能有严重的错误。
2. 注意那些你无法控制生命周期的对象的隐式引用
Java代码
1. publicclassDefineGeofenceFragmentextendsFragment{
2. publicclassGetLatAndLongAndUpdateMapCameraAsyncTaskextendsAsyncTask{
3.
4. @Override
5. protectedLatLngdoInBackground(String...params){
6. //...
7. try{
8. //Herewemakethehttprequestfortheplacesearchsuggestions
9. httpResponse=httpClient.execute(httpPost);
10. HttpEntityentity=httpResponse.getEntity();
11. in putStream=entity.getContent();
12. //..
13. }
14. }
15. }
16. }
这段代码有很多问题,但我现在只会把重点问题放在“隐式引用”那些问题上。在Java中,(非静态)内部类有个对外部类实例有个隐式引用。
在这个例子中,任何GetLatAndLongAndUpdateCameraAsyncTask都有一个外部类DefineGeofenceFragment的引用。对于匿名类是同样的,它们也有一个对包含它们的类的实例的一个隐式引用。
GetLatAndLongAndUpdateCameraAsyncTask对生命周期我们无法控制的Fragment对象有一个隐式引用。Android SDK负责创建和销毁Fragment,如果GetLatAndLongAndUpdateCameraAsyncTask 因为正在运行而不能被垃圾回收,那么DefineGeofenceFragment也将因为具有隐式引用而保留不能被垃圾回收。
如果你想找安卓应用开发服务,或者想要了解更多安卓应用开发资讯,就上一品威客网。一品威客网入驻上百家专业安卓应用开发公司,汇集全国千万优秀专业人才,提供最全面、最专业的安卓应用开发服务。
交易额: 246.04万元
无 |江苏省 |南京市 |建邺区
交易额: 151.77万元
无 |浙江省 |台州市 |玉环县
交易额: 110.67万元
工作室 |浙江省 |温州市 |瓯海区
交易额: 101.38万元
公司 |广东省 |东莞市 |东莞市
成为一品威客服务商,百万订单等您来有奖注册中
价格是多少?怎样找到合适的人才?
¥3000 已有0人投标
¥1000 已有3人投标
¥7000 已有4人投标
¥6000 已有1人投标
¥2000 已有1人投标
¥21000 已有1人投标
¥5000 已有1人投标
¥20500 已有19人投标