黑屏Android应用程序

时间:2018-06-28 07:37:07

标签: java android network-programming splash-screen

我在android应用中切换活动之间看到黑屏。据我所知,黑色是Android的默认绘图颜色,因此它是占位符,直到应用程序完成其布局操作为止。有很多因素可能导致应用延迟: 1.进行网络呼叫。 2.从磁盘加载数据。 3.从其他任务中收集垃圾。 4.恢复复杂的图形。

我已经看到this question及其链接,并且尝试了各种技术来优化应用程序,例如多线程等。我现在知道我的问题是网络调用,并且功能存在延迟当存在延迟问题时,例如,当互联网速度较慢时,我用来“检查互联网”和“获取并解析数据”的功能会缓慢运行,因为它取决于互联网速度。无法更改应用程序流程和活动生命周期,因为它们是根据功能要求严格设置的。有没有办法解决此问题或可以解决此问题?这些是我在初始屏幕中实现的代码片段,其他活动中也包含类似的代码。这是一个代码,用于检查onCreate中的Internet连接。

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash);
    chkStatus(this);
}
public boolean chkStatus(Context context) {
    final ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    final android.net.NetworkInfo wifi = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    final android.net.NetworkInfo mobile = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
    if (wifi.isConnectedOrConnecting() && isOnline()) {
        Log.e("connectedto", "Wifi");
        session.StoreMode("online");
        return true;
    } else if (mobile.isConnectedOrConnecting() && isOnline()) {
        Log.e("connectedto", "Mobile 3G");
        session.StoreMode("online");
        return true;
    } else {
        session.StoreMode("offline");
        Log.e("connectedto", "No Network ");
        return false;
    }
}
public Boolean isOnline() {
    try {
        Process p1 = java.lang.Runtime.getRuntime().exec("ping -c 1 www.google.com");
        int returnVal = p1.waitFor();
        boolean reachable = (returnVal == 0);
        return reachable;
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return false;
}

2 个答案:

答案 0 :(得分:0)

您没有在onCreateMethod中设置contentView:

之后添加此行
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);

希望这会有所帮助。

答案 1 :(得分:0)

我发现了正在发生的事情。在启动屏幕之前以某种方式调用了“ isOnline”功能。因此,当互联网速度低下时,该功能被卡住,并且在启动屏幕之前出现了黑屏,因为启动屏幕的时间在ping确认返回之前已经过去了。所以我从启动屏幕中删除了该功能并放在其他活动中。