BKJIA.com 综合报道】用户的困惑

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/43649913,本文出自:【张鸿洋的博客】

其实作为网络管理者,我们的要求很简单,网络不断,系统不瘫,数据不丢,这三点是我们的基本工作要求。但是,理想与现实之间的差距通常情况下是比较大的。在实际的网络管理工作中,不明确的管理工作流程导致的周期性的中断工作、缺乏流程连接导致的重复劳动浪费、流程不清导致的服务提供不一致、责任划分不清导致的错误百出……。这些问题无时不刻在困扰着网络管理者。为解决这类问题,ITSM的理念应运而生。

1、概述

ITSM落到实处

最近有不少朋友私聊问应用宝、360软件助手之类的软件详情页怎么做,刚好,最近有时间就模仿360软件助手详情页给大家做个Demo,供大家参考。嗯,关于实现呢,我写了两种方式:

ITSM只是一个方法论,想要把ITSM落到实处,还需要相关的软件来配套实施。目前,市场上出现了很多不同品牌的ITSM系统,广通信达的Broadview
COSS 3.0是这些产品中比较出色的一款。

1、ScrollView内嵌软件介绍+ViewPager+ViewPager中是ScrollView,这种方式呢,纯原生,没有涉及到自定义控件,但是这样嵌套呢,涉及到测量以及事件的冲突处理,大家可以自己尝试去做一下,想像起来蛮容易的,做起来其实还是挺费劲的,代码我会给出,核心代码不多,大家自行参考。本文将重点分析第二种方式。

Broadview COSS
3.0采用ITIL理论,将人、技术、流程三者统一在了一起。从功能度的角度来看,Broadview
COSS
3.0涵盖了统一运行展现、服务台、事件管理、问题管理、变更管理与发布管理、日常运行作业和外包服务管理、配置和资产管理、服务水平管理、知识库等ITSM中所涉及的功能,而且这套系统购买和部署灵活,它支持复杂工作流和高层次集成、满足法规和遵循性要求。

2、将做外层的ScrollView改为了自定义的一个控件,继承自LinearLayout,叫做StickyNavLayout,这里感谢小七的命名,同时本方式感谢二群暖暖提供的源码。

通过Broadview COSS
3.0,网络管理者可以把系统监测,网络监测、应用监测以及业务视图集中统一的展现在自己的眼前,实现了底层网络与上层应用业务的挂钩。当应用系统出现了问题的时候,网管员可以有效得知该问题是由于什么网络故障造成的。

最后看下效果图,第一张是360的,第二张是我们的:

同时,Broadview COSS
3.0为网络管理部门提供了一个运维管理门户——服务台。通过这个服务台,管理人员可以把运行值班、故障监控、接受请求、工单派发、问题解决过程中的监测等相关的工作进行梳理,并且形成相关的流程。这样一来,当网络出现了故障,网络管理部门便可以按部就班的进行处理。可以说,“服务台”功能为为所有请求提供了一个中心联络点(SPOC),有了这个联络点,网络的使用者和管理者便可以进行有效的联动起来,换句话说,“服务台”功能使得网路管理者和网络使用者不在相互独立,他们可以通过“服务台”进行有效的沟通交流。

360:

以前,网络管理是一个非常依托个人的工作,在一个单位中,如果网络管理方面发生了人员变动,新的网管员将会有一个很长的“工作适应阶段”。因为对于网管工作来说,网络架构、网络的应用对应关系、相关的故障成因等很多方面是要依托管理经验的。Broadview
COSS
3.0的“知识库”功能可以把这些管理方面的经验自动进行总结,形成一套完备的“工作日制”。通过“知识库”,Broadview
COSS
3.0帮助各级支持人员提高技能水平,简化IT服务任务、降低对具体个人依赖的手段。对于一些简单的网络故障,“知识库”甚至可以自动进行相关的故障排除,大大简化的网管员的工作量。

美高梅电子游戏 1

很多网管员可以体会到,网络管理工作中有很多工作是重复的,程式化的工作。这些重复工作耗费了大量的时间和精力,但是又不得不去做。针对这方面,广通信达Broadview
COSS
3.0对日常运行维护工作进行管理,将一些周期性的、相对固定的日常维护作业统一管理起来,由系统来代替人工,自动将这些重复工作按时完成。

擦,别问我为什么这么模糊,尽力了。。。

此外,Broadview COSS
3.0相当的人性化,他采用了类似Web2.0的技术,使用者可以自己订制自己所习惯的管理界面,以方便使用者的管理。

我们的效果图:

总结

美高梅电子游戏 2

当然,Broadview COSS
3.0中的“事件管理”、“问题管理”、“配置管理”、“变更管理”等ITSM系统的基础功能也非常的完备,在这里就不过多的介绍了。感兴趣的朋友可以到他们的网站浏览一下。

2、使用方式

综合报道】用户的困惑
其实作为网络管理者,我们的要求很简单,网络不断,系统不瘫,数据不丢,这三点是我们的基本工作要求…

上面我们也说了,之所以有第二种方式,完全是为了考虑使用的容易度。

1、自定义id资源文件

values/ids_sticky_nav_Llayout.xml

[html]view
plaincopy

定义了几个id资源,主要是为了方便使用了,供声明布局时使用的,看名字应该能猜出来吧,猜不出来没事,接下来我就贴布局文件了。这个其实不属于使用方式了,但是下文会见到,所以提前贴出来。

2、布局文件

[html]view
plaincopy

xmlns:android=””

android:layout_width=”match_parent”

android:layout_height=”match_parent”

android:orientation=”vertical”>

android:id=”@id/id_stickynavlayout_topview”

android:layout_width=”match_parent”

android:layout_height=”300dp”

android:background=”#4400ff00″>

android:layout_width=”match_parent”

android:layout_height=”match_parent”

android:gravity=”center”

android:text=”软件介绍”

android:textSize=”30sp”

android:textStyle=”bold”/>

android:id=”@id/id_stickynavlayout_indicator”

android:layout_美高梅电子游戏 ,width=”match_parent”

android:layout_height=”50dp”

android:background=”#ffffffff”>

android:id=”@id/id_stickynavlayout_viewpager”

android:layout_width=”match_parent”

android:layout_height=”wrap_content”

android:background=”#44ff0000″>

最外层是我们的自定义的控件StickyNavLayout,然后是顶部内容区域,Vp的指示器,ViewPager。按照效果图,去写就ok,注意部分id使用我们预设定的id资源。因为我们的StickyNavLayout需要通过id找到该控件,去进行一些计算。

然后在我们的MainActivity中,对ViewPager进行初始化即可。

3、MainActivity

[java]view
plaincopy

packagecom.zhy.sample.StickyNavLayout;

importandroid.os.Bundle;

importandroid.support.v4.app.Fragment;

importandroid.support.v4.app.FragmentActivity;

importandroid.support.v4.app.FragmentPagerAdapter;

importandroid.support.v4.view.ViewPager;

importandroid.support.v4.view.ViewPager.OnPageChangeListener;

importcom.zhy.view.SimpleViewPagerIndicator;

publicclassMainActivityextendsFragmentActivity

{

privateString[] mTitles =newString[] {“简介”,”评价”,”相关”};

privateSimpleViewPagerIndicator mIndicator;

privateViewPager mViewPager;

privateFragmentPagerAdapter mAdapter;

privateTabFragment[] mFragments =newTabFragment[mTitles.length];

@Override

protectedvoidonCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initViews();

initDatas();

initEvents();

}

privatevoidinitEvents()

{

mViewPager.setOnPageChangeListener(newOnPageChangeListener()

{

@Override

publicvoidonPageSelected(intposition)

{

}

@Override

publicvoidonPageScrolled(intposition,floatpositionOffset,

intpositionOffsetPixels)

{

mIndicator.scroll(position, positionOffset);

}

@Override

publicvoidonPageScrollStateChanged(intstate)

{

}

});

}

privatevoidinitDatas()

{

mIndicator.setTitles(mTitles);

for(inti =0; i < mTitles.length; i++)

{

mFragments[i] = (TabFragment) TabFragment.newInstance(mTitles[i]);

}

mAdapter =newFragmentPagerAdapter(getSupportFragmentManager())

{

@Override

publicintgetCount()

{

returnmTitles.length;

}

@Override

publicFragment getItem(intposition)

{

returnmFragments[position];

}

};

mViewPager.setAdapter(mAdapter);

mViewPager.setCurrentItem(0);

}

privatevoidinitViews()

{

mIndicator = (SimpleViewPagerIndicator) findViewById(R.id.id_stickynavlayout_indicator);

mViewPager = (ViewPager) findViewById(R.id.id_stickynavlayout_viewpager);

}

}

没有什么复杂的代码,主要就是初始化我们的Vp;

对了这个指示器我是临时写的,也算一个自定义控件吧,主要就是跟随Vp一起移动,详细写法请参考:Android
教你打造炫酷的ViewPagerIndicator
不仅仅是高仿MIUI,只是把三角形改成了下划线,非本文重点,你可以暂时忽略。

我们的Vp中每个页面为一个Fragment,Fragment的代码我们就不贴了,布局就是ScrollView为根布局,内部随意填充,具体可参考源码。

介绍完了用法有木有一点小激动,基本按照常规去写布局就ok,效果自动实现。

4、Fragment及其布局

贴一下我们的Fragment代码:

[java]view
plaincopy

packagecom.zhy.sample.StickyNavLayout;

importandroid.os.Bundle;

importandroid.support.v4.app.Fragment;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.view.ViewGroup;

importandroid.widget.TextView;

publicclassTabFragmentextendsFragment

{

publicstaticfinalString TITLE =”title”;

privateString mTitle =”Defaut Value”;

privateTextView mTextView;

@Override

publicvoidonCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

if(getArguments() !=null)

{

mTitle = getArguments().getString(TITLE);

}

}

@Override

publicView onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState)

{

View view = inflater.inflate(R.layout.fragment_tab, container,false);

mTextView = (TextView) view.findViewById(R.id.id_info);

mTextView.setText(mTitle);

returnview;

}

publicstaticTabFragment newInstance(String title)

{

TabFragment tabFragment =newTabFragment();

Bundle bundle =newBundle();

bundle.putString(TITLE, title);

tabFragment.setArguments(bundle);

returntabFragment;

}

}

[html]view
plaincopy

xmlns:tools=””

android:id=”@id/id_stickynavlayout_innerscrollview”

android:layout_width=”match_parent”

android:layout_height=”match_parent”

android:scrollbars=”none”>

android:layout_width=”match_parent”

android:layout_height=”wrap_content”

android:background=”#eee”

android:orientation=”vertical”

android:padding=”5dp”>

android:id=”@+id/id_info”

android:layout_width=”match_parent”

android:layout_height=”50dp”

android:background=”#ffffffff”

android:gravity=”center”>

//省略了无数控件

没撒说的 ,let’s go 。

3、StickyNavLayout源码剖析

1、构造

[java]view
plaincopy

publicclassStickyNavLayoutextendsLinearLayout

{

privateView mTop;

privateView mNav;

privateViewPager mViewPager;

privateintmTopViewHeight;

privateScrollView mInnerScrollView;

privatebooleanisTopHidden =false;

privateOverScroller mScroller;

privateVelocityTracker mVelocityTracker;

Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章