在软件开始启动时都是会使用一个splashActivity实现联网判断和相关资源的加载,在一款网络软件上开始时的缓存加载和网络判断可以为用户节省不必要的流量开销。
使用handler延时启动下一个activity
/** * Created by ShengXi on 2018-04-18. * 我们都知道在使用Handler来进行消息通讯的时候由于Activity持有Handler的强引用容易导致页面无法回收造成内存泄露的危险。 * 在网上提出了一些解决方案大都是将强引用改为使用WeakReference的弱引用来避免对象无法回收的状况发生 */ public class BaseHandler <T extends BaseHandler.BaseHandlerCallBack>extends Handler{ WeakReference <T> wr; public BaseHandler(T t){ wr = new WeakReference<T>(t); } @Override public void handleMessage(Message msg) { super.handleMessage(msg); T t = wr.get(); if(t!=null) t.callBack(msg); } public interface BaseHandlerCallBack{ public void callBack(Message msg); } }
实际用法和handler一样但是可以避免内存泄漏
private Handler handler = new BaseHandler<>(new BaseHandler.BaseHandlerCallBack() { @Override public void callBack(Message msg) { if (msg.what == 1){ CategoryAdapter categoryAdapter = new CategoryAdapter(CategoryActivity.this,dataBean); listview.setAdapter(categoryAdapter); } } });
private Handler handler = new BaseHandler<>(new BaseHandler.BaseHandlerCallBack() { @Override public void callBack(Message msg) { if (msg.what == MSGONE){ Intent in = new Intent(SplashActivity.this, MainActivity.class);
SplashActivity.this.startActivity(in);
finish(); } } });
//延时3秒启动 handler.sendEmptyMessageDelayed(MSGONE, 3000);
但是再启动app时又会遇到白屏或者黑屏,根据网上的资料是说,不同的设备可能白屏黑屏显示的时间长短不同,设备硬件较差的时间都会比较长,设备在启动应用时系统和app会去检查和创建进程,这是就会留下空挡的时间不去加载布局,就会产生白屏或者黑屏,会优先显示窗体,网络的解决办法是:
为activity设置窗体背景
1.设置自定义style,让窗体显示的背景为app的logo
<style name="Theme.AppLauncer" parent="@android:style/Theme.NoTitleBar.Fullscreen"> <item name="android:background">@mipmap/icon1</item> <item name="android:windowNoTitle">true</item> <item name="android:windowFullscreen">true</item> <item name="android:windowActionBar">false</item> </style>
2.在配置文件中调用activity的theme
<activity android:name="com.example.shengxi.eie.activity.SplashActivity" android:theme="@style/Theme.AppLauncer"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
以上只是简单优化,后续介绍更多,方便给初入门的你。