解决方案

时间:2022-05-05 19:43:45 解决方案 我要投稿

实用的解决方案4篇

  为了确保工作或事情有序地进行,通常需要提前准备好一份方案,方案是计划中内容最为复杂的一种。怎样写方案才更能起到其作用呢?以下是小编帮大家整理的解决方案4篇,欢迎大家借鉴与参考,希望对大家有所帮助。

实用的解决方案4篇

解决方案 篇1

  发生IP地址冲突的原因:

  1、很多用户不知道“IP地址”、“子网掩码”、“默认网关”等参数如何设置,有时用户不是从管理员处得到的上述参数的信息,或者是用户无意修改了这些信息所导致的;

  2、有时管理员或用户根据管理员提供的参数进行设置时,由于失误造成参数输错也会导致该情况发生;

  3、出现得最多的是在客户机维修调试时,维修人员使用临时IP地址应用造成;

  4、也不排除有人盗用他人的IP地址,造成IP地址冲突。

  局域网IP地址冲突的解决方案:

  方案一:逐一排查。

  这是最原始的方法,就是发生IP地址冲突时,在局域网内,挨着每台计算机查看,找到与其冲突的计算机后修改IP地址就可以了。不过这样比较耗时间,也不适合在大型局域网中使用,只适合在很小的网络环境中采用。

  方案二:MAC地址绑定。

  1、检查本地计算机的MAC并绑定:通过在本地计算机系统中运行Winipcfg.exe或Ipconfig.exe,即可测知网卡的MAC地址。具体如下:在Win9X系统中依次单击“开始”——“运行”,在文本框中输入“Winipcfg”并回车后将弹出“IP配置”窗口。在下拉列表中选择“PCI Fast Ethernet Adapeter”,此时显示在“适配器地址”栏中的文字即为该网卡的MAC地址;在WinNT系统的DOS提示符下运行带有“all”参数的ipconfig命令,即ipconfig/all也可以显示网卡的MAC地址。

  2、远程测试计算机的MAC地址:对于网络管理员而言,可以用TCPNetView工具软件来实现坐在自己的计算机前就能测知局域网中所有计算机的MAC地址。该软件在安装完成之后,执行tcpnv.exe即可显示程序主窗口,在“File”菜单中选择“Refresh”命令,或者直接按“F5”键,即可开始对局域网中现有的计算机进行扫描,然后将显示计算机名、IP地址和MAC地址等内容。当等到了一台计算机上网卡的MAC地址后,就可以把它记录下来,由网管在网关或者防火墙上进行配置即可。具体的绑定命令视采用的网关或者防火墙不同而有所变化,这时,如果有其他的计算机想使用已绑定过的地址,就会出现IP地址已经被使用的提示。

  方案三:交换机安全端口。

  过去常常在网络里使用路由器和集线器,而现在很多局域网转而采用了交换机。随着近几年来交换机的大幅降价,交换机在网络市场上占据了主导地位,主要原因是交换机性价比高,结构灵活,可以随着未来应用的变化而灵活配置。对于所遇到的IP地址冲突,还可以利用交换机的端口把不同的部门隔离开来解决,这是因为利用交换机可以对不同的区域实行不同的管理,经过分割的网段之间互不干扰,可以在一定程度上解决IP地址冲突的问题。

  方案四:划分VLAN。

  虽然可以用交换机来实现网段隔离,从而在一定程度上避免IP地址冲突的发生,但它仍不能防止由于同一个端口下的网段内用户配置错误而引起的IP地址冲突。更好的解决方法就是,利用交换机来划分VLAN,再利用MAC地址绑定的方法来综合处理。

解决方案 篇2

  *{padding:0;margin:0}

  p{height:20xxpx}

  #gs{border:1px solid #000;position:fixed;right:30px;top:120px}

  11111111111111111

  以上这段代码在网上很常见,通过设置html{overflow:hidden}和body{height:100%;overflow:auto}来实现ie6下position:fixed效果,但这种办法有个缺陷,那就是:这会使页面上原有的absolute、relation都变成fixed的效果,在这里我就不做demo了,如果有怀疑,可以自己去试验一下。

  于是我找了下资料,发现可以通过一条Internet Explorer的CSS表达式(expression)来完美的实现ie6下position:fixed效果,css代码如下:

  /* 除IE6浏览器的通用方法 */

  .ie6fixedTL{position:fixed;left:0;top:0}

  .ie6fixedBR{position:fixed;right:0;bottom:0}

  /* IE6浏览器的特有方法 */

  * html .ie6fixedTL{position:absolute;left:expression(eval(document.documentElement.scrollLeft));top:expression(eval(document.documentElement.scrollTop))}

  * html .ie6fixedBR{position:absolute;left:expression(eval(document.documentElement.scrollLeft+document.documentElement.clientWidth-this.offsetWidth)-(parseInt(this.currentStyle.marginLeft,10)||0)-(parseInt(this.currentStyle.marginRight,10)||0));top:expression(eval(document.documentElement.scrollTop+document.documentElement.clientHeight-this.offsetHeight-(parseInt(this.currentStyle.marginTop,10)||0)-(parseInt(this.currentStyle.marginBottom,10)||0)))}

  上面代码可以直接使用了,如果要设置元素悬浮边距,要分别为设置两次,比如我要让某个元素距顶部10个像素,距左部也是10个像素,那就要这样子写:

  /* 除IE6浏览器的通用方法 */

  .ie6fixedTL{position:fixed;left:10px;top:10px}

  /* IE6浏览器的特有方法 */

  * html .ie6fixedTL{position:absolute;left:expression(eval(document.documentElement.scrollLeft+10));top:expression(eval(document.documentElement.scrollTop+10))}

  这样一来,IE6下实现position:fixed的效果解决了,而且也不会影响到其他的absolute、relation,但还有一个问题,就是悬浮的元素会出现振动

  IE有一个多步的渲染进程。当你滚动或调整你的浏览器大小的时候,它将重置所有内容并重画页面,这个时候它就会重新处理css表达式。这会引起一个丑陋的“振动”bug,在此处固定位置的元素需要调整以跟上你的(页面的)滚动,于是就会“跳动”。

  解决此问题的技巧就是使用background-attachment:fixed为body或html元素添加一个background-image。这就会强制页面在重画之前先处理CSS。因为是在重画之前处理CSS,它也就会同样在重画之前首先处理你的CSS表达式。这将让你实现完美的平滑的固定位置元素!

  然后我发现background-image无需一张真实的图片,设置成about:blank就行了。

  下面附上完整代码

  /* 除IE6浏览器的通用方法 */

  .ie6fixedTL{position:fixed;left:0;top:0}

  .ie6fixedBR{position:fixed;right:0;bottom:0}

  /* IE6浏览器的特有方法 */

  /* 修正IE6振动bug */

  * html,* html body{background-image:url(about:blank);background-attachment:fixed}

  * html .ie6fixedTL{position:absolute;left:expression(eval(document.documentElement.scrollLeft));top:expression(eval(document.documentElement.scrollTop))}

  * html .ie6fixedBR{position:absolute;left:expression(eval(document.documentElement.scrollLeft+document.documentElement.clientWidth-this.offsetWidth)-(parseInt(this.currentStyle.marginLeft,10)||0)-(parseInt(this.currentStyle.marginRight,10)||0));top:expression(eval(document.documentElement.scrollTop+document.documentElement.clientHeight-this.offsetHeight-(parseInt(this.currentStyle.marginTop,10)||0)-(parseInt(this.currentStyle.marginBottom,10)||0)))}

解决方案 篇3

  Android设置闹钟并不像IOS那样这么简单,做过Android设置闹钟的开发者都知道里面的坑有多深。下面记录一下,我解决Android闹钟设置的解决方案。

  主要问题

  1、API19开始AlarmManager的机制修改。

  2、应用程序被Kill掉后,设置的闹钟不响。

  3、6.0以上进入Doze模式会使JobScheduler停止工作。

  4、手机设置重启后,闹钟失效问题。

  API19以上AlarmManager机制的修改

  API19之前AlarmManager提供了三个设置闹钟的方法,由于业务需求闹钟只需要一次性,所以采用set(int type,long startTime,PendingIntent pi);这个方法。

  从API 19开始,AlarmManager的机制都是非准确传递,操作系统将会转换闹钟,来最小化唤醒和电池使用。

Android闹钟设置的解决方案1

  由于之前的程序,没有对API19以上的闹钟设置做处理,导致在4.4以上的手机设置闹钟无响应(应用程序没有被杀死的情况也没有闹钟)。

  因些,设置闹钟需要根据API的版本进行分别处理设置。代码如下:

  AlarmManager am = (AlarmManager) getActivity() .getSystemService(Context.ALARM_SERVICE);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { am.setExact(AlarmManager.RTC_WAKEUP, TimeUtils .stringToLong(recordTime, TimeUtils.NO_SECOND_FORMAT), sender);}else { am.set(AlarmManager.RTC_WAKEUP, TimeUtils .stringToLong(recordTime, TimeUtils.NO_SECOND_FORMAT), sender);}

  这样,保证闹钟在应用程序没有被Kill掉的情况闹钟。

  应用程序被Kill掉时的处理

  应用程序被Kill掉后,设置的闹钟失效,这里利用守护进程以及灰色保活来保证后台闹钟服务不被Kill掉。当应用程序以及闹钟服务被Kill掉,守护进程以及灰色保活来重新启动闹钟服务,并且重新设置闹钟。

  关于守护进程的处理,这里采用开源的守护进程库。Android-AppDaemon

  在闹钟服务的onCreat加入Android-AppDaemon这个开源的守护进程。代码如下:

  @Overridepublic void onCreate() { super.onCreate(); Daemon.run(DaemonService.this, DaemonService.class, Daemon.INTERVAL_ONE_MINUTE); startTimeTask(); grayGuard();}

  为进一步保证闹钟服务的存活,同加上灰色保活(利用系统的漏洞启动前台Service)。

  代码如下:

  private void grayGuard() { if (Build.VERSION.SDK_INT < 18) { //API < 18 ,此方法能有效隐藏Notification上的图标 startForeground(GRAY_SERVICE_ID, new Notification()); } else { Intent innerIntent = new Intent(this, DaemonInnerService.class); startService(innerIntent); startForeground(GRAY_SERVICE_ID, new Notification()); } //发送唤醒广播来促使挂掉的UI进程重新启动起来 AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Intent alarmIntent = new Intent(); alarmIntent.setAction(WakeReceiver.GRAY_WAKE_ACTION); PendingIntent operation = PendingIntent.getBroadcast(this, WAKE_REQUEST_CODE, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { alarmManager.setWindow(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), ALARM_INTERVAL, operation); }else { alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), ALARM_INTERVAL, operation); }}/** * 给 API >= 18 的平台上用的灰色保活手段 */public static class DaemonInnerService extends Service { @Override public void onCreate() { Log.i(LOG_TAG, "InnerService -> onCreate"); super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i(LOG_TAG, "InnerService -> onStartCommand"); startForeground(GRAY_SERVICE_ID, new Notification()); //stopForeground(true); stopSelf(); return super.onStartCommand(intent, flags, startId); } @Override public IBinder onBind(Intent intent) { throw new UnsupportedOperationException("Not yet implemented"); } @Override public void onDestroy() { Log.i(LOG_TAG, "InnerService -> onDestroy"); super.onDestroy(); }}

  上面操作尽可能提高闹钟服务的存活。但是在5.0以上的手机,利用系统的.自带的Clean功能的时候,还是会将闹钟服务彻底的干掉。为了解决5.0以上的问题,这里引入5.0以上的新特性 JobScheduler。

  5.0以上的JobScheduler

  在这里利用5.0以上的JobScheduler创建一个定时的任务,定时检测闹钟服务是否存在,没在存在则重新启动闹钟服务。(这里我设置每一分钟检测一次闹钟服务)

  在进入应用程序的时候检测当前系统是否是5.0以上,如果是则启动JobScheduler这个服务。代码如下:

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { mJobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE); JobInfo.Builder builder = new JobInfo.Builder(JOB_ID, new ComponentName(getPackageName(), JobSchedulerService.class.getName())); builder.setPeriodic(60 * 1000); //每隔60秒运行一次 builder.setRequiresCharging(true); builder.setPersisted(true); //设置设备重启后,是否重新执行任务 builder.setRequiresDeviceIdle(true); if (mJobScheduler.schedule(builder.build()) <= 0) { //If something goes wrong }}

  其中的builder.setPersisted(true); 方法是设备重启后,是否重新执行任务,在这测过是可以重新启动任务的。

  上面的操作进一步保证了闹钟服务被Kill掉后,重新启动服务。但是在6.0以上引入了Doze模式,当6.0以上的手机进入这个模式后,便会使JobScheduler停止工作。

  6.0以上Doze模式的处理

  为了让JobScheduler可以在6.0以上进入Doze模式工作,这里针对6.0以上的Doze模式做特殊的处理-忽略电池的优化。

  在Manifest.xml中加入权限。

  

  在设置闹钟的时候,判断系统是否是6.0以上,如果是,则判断是否忽略电池的优化。判断是否忽略电池优化代码如下:

  @TargetApi(Build.VERSION_CODES.M)public static boolean isIgnoringBatteryOptimizations(Activity activity){ String packageName = activity.getPackageName(); PowerManager pm = (PowerManager) activity .getSystemService(Context.POWER_SERVICE); if (pm.isIgnoringBatteryOptimizations(packageName)) { return true; }else { return false; }}

  如果没有忽略电池优化的时候,弹出提醒对话框,提示用户进行忽略电池优化操作。代码如下:

  /*** 针对N以上的Doze模式** @param activity*/public static void isIgnoreBatteryOption(Activity activity) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { try { Intent intent = new Intent(); String packageName = activity.getPackageName(); PowerManager pm = (PowerManager) activity.getSystemService(Context.POWER_SERVICE); if (!pm.isIgnoringBatteryOptimizations(packageName)) {// intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS); intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); intent.setData(Uri.parse("package:" + packageName)); activity.startActivityForResult(intent, REQUEST_IGNORE_BATTERY_CODE); } } catch (Exception e) { e.printStackTrace(); } }}

  在界面重写onActivityResult方法来捕获用户的选择。如,代码如下:

  @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { if (requestCode == BatteryUtils.REQUEST_IGNORE_BATTERY_CODE){ //TODO something } }else if (resultCode == RESULT_CANCELED){ if (requestCode == BatteryUtils.REQUEST_IGNORE_BATTERY_CODE){ ToastUtils.show(getActivity(), "请开启忽略电池优化~"); } }}

  补充

  当应用程序被Kill掉,但是闹钟的服务没有被Kill掉的,这时候又设置了闹钟。这就意味着设置的闹钟没有放到闹钟服务那里。所以这种情况,设置的闹钟会失效。为了解决这种情况,利用AIDL(闹钟服务在另一个进程的需要进程间通信)调用闹钟服务的重新设置闹钟方法重设闹钟。

  在应用程序的onCreat()方法启动闹钟服务,然后再绑定闹钟服务。

  private void initAlarmService() { startService(new Intent(this, DaemonService.class));//启动闹钟服务 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //JobScheduler ... } //绑定闹钟服务 Intent intent = new Intent(this, DaemonService.class); intent.setAction("android.intent.action.DaemonService"); bindService(intent, mConnection, Context.BIND_AUTO_CREATE);}

  在onDestroy()方法,调用闹钟服务的重设闹钟方法。代码如下:

  @Overrideprotected void onDestroy() { super.onDestroy(); try {//判断是否有闹钟,没有则关闭闹钟服务 String alarm = localPreferencesHelper.getString(LocalPreferencesHelper.ALARM_CLOCK); if (daemonService != -1 && mIRemoteService != null) {// android.os.Process.killProcess(daemonService); mIRemoteService.resetAlarm(); } if (!alarm.equals("[]")) { if (daemonService != -1) { startService(new Intent(this, DaemonService.class)); } } else { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { mJobScheduler.cancel(JOB_ID); } } unbindService(mConnection); //解除绑定服务。 } catch (Exception e) { }}

  这里说明一下,当服务启动并且被绑定的情况下,unbindService是不会停止服务的。

  最后

  以上并不代表所有的Android手机的闹钟都可以用,这只是尽最大的可能保证大部分的手机。

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持教程网。

解决方案 篇4

  我的女友是一个诡计多端的家伙。我苦苦地追了她一年多,她始终在爱与不爱之间徘徊。我的关心和爱护,她每次都照单全收,但就是不肯把关系明确,存心吊我的胃口。我心里很矛盾:继续追吧,对方是一根难啃的骨头;她吧,又极不甘心,因为她确实是我梦寐以求的对象。

  正当我处于迷茫之中的时候,在外地工作的大哥回来探亲了。大哥见我整天愁闷苦脸的,问我何故。我便把实情对大哥说了。没想到大哥听了爽朗一笑:“这其实是一个极容易解决的问题呀!”我忙问:“怎么解决?”大哥说:“只要你痛下决心冷淡她一回,你很快就可以知道她究竟爱不爱你。如果她忍受不了你的冷淡——她可能会主动向你伸出橄榄枝,也可能会千方百计找借口对你发脾气——这都是爱你表现。如果她对你的冷淡无动于衷,那你不如趁早死心。”

  想想大哥说得也有道理。于是斗胆按照大哥的主意一试,不再约她出去,她来电话也懒得接听。果然,不出一个星期,女友就主动找上门来了。女友一见面就质问我:“这几天干吗不来找我?”我翘着二郎腿反问:“我为什么要来找你?”女友以前还从未从我这儿领教过这种说话的口气,顿时心里乱了方寸:“你……怎么了嘛?”我说:我没怎么,只是现在想通了,不想再折腾自己!”女友一向聪明过人,自然很容易明白我话里的意思。她显然意识到了问题的严重性,马上温情脉脉地走近我:“我有什么不对你跟我说嘛,不要生气好不好?”我一把抱住女友猛吻,女友丝毫没有反抗。

  我把的喜讯告诉大哥时,大哥避开大嫂悄悄地对我说:“你大嫂当初也是这样,总在我面前趾高气扬。后来我不再理睬她,她反而主动来追我。”

【实用的解决方案4篇】相关文章:

实用的解决方案3篇05-02

【实用】解决方案3篇05-01

【实用】解决方案4篇05-01

【实用】解决方案三篇04-30

【实用】解决方案四篇04-29

实用的解决方案汇编9篇05-02

【实用】解决方案模板八篇05-04

【实用】解决方案七篇05-02

【实用】解决方案模板集锦7篇05-03

解决方案6篇05-01