精华内容
下载资源
问答
  • Android后台服务在屏幕休眠保持运行

    千次阅读 2020-05-05 20:27:31
    Android App中的Service可以保持后台运行,比如音乐播放就是Service的典型应用,在开发移动APP时,很多业务场景需要用到Service保持在后台运行,在实现过程中Service在屏幕休眠下继续保持运行,往往没有按照预期...

    Android App中的Service可以保持后台运行,比如音乐播放就是Service的典型应用,在开发移动APP时,很多业务场景需要用到Service保持在后台运行,在实现过程中让Service在屏幕休眠下继续保持运行,往往没有按照预期运行,下面例程中实现后台服务定时上报GPS数据,尝试多种方式勉强实现。

    1、将服务设置为前台服务,在屏幕左上角显示一个图标

    在这里插入图片描述
    在Service的onStartCommand方法里面,将服务放置前台
    在这里插入图片描述
    在onDestroy方法里面
    在这里插入图片描述

    2、只将Service放置到前台前提下,继续设置电源控制

    在onCreate方法里面,添加电源控制
    在这里插入图片描述

    在onDestroy方法里面
    在这里插入图片描述

    3、在设置1、2前题下,继续实现后台播放无声音乐

    在onStartCommand添加音乐播放音乐
    在这里插入图片描述
    在onDestroy方法里面
    在这里插入图片描述

    4、设置前台服务可以在APP退出后可以释放资源

    在onStartCommand返回START_NOT_STICKY,否则前台服务无法退出
    在这里插入图片描述

    5、使用高德地图API定时采集GPS数据

    @Override
    public void onCreate() {
        super.onCreate();
    
        PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
        wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TimerLocationService.class.getName());
        wakeLock.acquire();
    
        locationClient = new AMapLocationClient(this.getApplicationContext());
        locationClient.setLocationOption(getDefaultOption());
        locationClient.setLocationListener(locationListener);
        // 启动定位
        locationClient.startLocation();
    
        IntentFilter filter= new IntentFilter();
        filter.addAction(Intent.ACTION_TIME_TICK);
        registerReceiver(receiver,filter);
    
        Util.service = this;
    }
    

    完全实现1-5中的代码,可以保证服务在屏幕休眠后保持运行,后台播放无声音乐缺点是比较耗电。

    package com.hk.ecology.service;
    
    import android.app.Notification;
    import android.app.PendingIntent;
    import android.app.Service;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.graphics.BitmapFactory;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.media.MediaPlayer;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.IBinder;
    import android.os.PowerManager;
    import android.util.Log;
    
    import com.amap.api.location.AMapLocation;
    import com.amap.api.location.AMapLocationClient;
    import com.amap.api.location.AMapLocationClientOption;
    import com.amap.api.location.AMapLocationListener;
    import com.hk.ecology.activity.LoadingActivity;
    import com.hk.ecology.logic.HttpCallBack;
    import com.hk.ecology.logic.HttpRequest;
    import com.hk.ecology.logic.RequestCodeSet;
    import com.hk.ecology.model.BaseModel;
    import com.hk.ecology.model.WxOrderInfo;
    import com.hk.ecology.receiver.CheckReceiver;
    import com.hk.ecology.R;
    import com.hk.ecology.util.SPUtil;
    import com.hk.ecology.util.Util;
    
    import java.util.List;
    import java.util.Timer;
    import java.util.TimerTask;
    
    
    public class TimerLocationService extends Service implements HttpCallBack, RequestCodeSet, MediaPlayer.OnCompletionListener {
        private AMapLocationClientOption locationOption = new AMapLocationClientOption();
        private AMapLocationClient locationClient = null;
        public static TimerLocationService instance = null;
        private final BroadcastReceiver receiver = new CheckReceiver();
        private MediaPlayer mMediaPlayer;
        private PowerManager pm;
        private PowerManager.WakeLock wakeLock = null;
    
        public TimerLocationService() {
            TimerLocationService.instance = this;
        }
    
        @Override
        public void onCreate() {
            super.onCreate();
    
            PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
            wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TimerLocationService.class.getName());
            wakeLock.acquire();
    
            locationClient = new AMapLocationClient(this.getApplicationContext());
            locationClient.setLocationOption(getDefaultOption());
            locationClient.setLocationListener(locationListener);
            // 启动定位
            locationClient.startLocation();
    
            IntentFilter filter= new IntentFilter();
            filter.addAction(Intent.ACTION_TIME_TICK);
            registerReceiver(receiver,filter);
    
            Util.service = this;
        }
    
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            //id = intent.getStringExtra("id");
            Notification.Builder builder = new Notification.Builder(this.getApplicationContext());
            Intent nfIntent = new Intent(this, LoadingActivity.class);
            builder.setContentIntent(PendingIntent.getActivity(this, 0, nfIntent, 0))
                    .setLargeIcon(BitmapFactory.decodeResource(this.getResources(), R.drawable.ic_default_head))
                    .setContentTitle("古方红糖-绿色农产品")
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setContentText("发货跟踪")
                    .setWhen(System.currentTimeMillis());
            Notification notification = builder.build();
            startForeground(startId, notification);
    
            mMediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.no_notice);
            mMediaPlayer.setLooping(true);
            if (mMediaPlayer != null && !mMediaPlayer.isPlaying()) {
                mMediaPlayer.setOnCompletionListener(this);
                mMediaPlayer.start();
            }
    
            //flags = START_STICKY;
            //return super.onStartCommand(intent, flags, startId);
            return START_NOT_STICKY;
        }
    
        public void requestServer(double longitude,double latitude) {
            String loginId = Util.fmtStr(SPUtil.getString("loginId"));
            String password = Util.fmtStr(SPUtil.getString("password"));
            Log.e("requestServer######################################","loginId="+loginId+",password="+password);
            if(!Util.isNull(loginId)) {
                HttpRequest.getInstance().track(this, this, String.valueOf(longitude), String.valueOf(latitude), "1");
            }
        }
    
        @Override
        public void onCompletion(MediaPlayer mp) {
            Log.e("######################################","onCompletion");
            //Location myLoc = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
            //HttpRequest.getInstance().track(this, this,id,String.valueOf(myLoc.getLongitude()),String.valueOf(myLoc.getLatitude()),"1");
        }
    
        @SuppressWarnings("deprecation")
        @Override
        public void onDestroy() {
            exitService();
            super.onDestroy();
        }
    
        public void exitService()
        {
            stopForeground(true);
            if (mMediaPlayer != null) {
                mMediaPlayer.stop();
            }
            if (wakeLock != null) {
                wakeLock.release();
                wakeLock = null;
            }
            this.stopSelf();
        }
    
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    
        @Override
        public void onSuccess(BaseModel result) {
            if(result != null)
            {
                List<WxOrderInfo> orderList = (List<WxOrderInfo>)result.getResult();
                Log.e("orderList--------------------------------------",orderList.toString());
                String orderId = "";
                for(WxOrderInfo ord:orderList)
                {
                    orderId = orderId + ord.getId() + ",";
                }
                if(orderId.endsWith(","))
                    orderId = orderId.substring(0,orderId.length()-1);
                SPUtil.saveString("orderId",orderId);
            }
        }
    
        @Override
        public void onFailure(BaseModel result) {
    
        }
    
        @Override
        public void onFinish(BaseModel result) {
    
        }
    
        private AMapLocationClientOption getDefaultOption(){
            AMapLocationClientOption mOption = new AMapLocationClientOption();
            mOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
            mOption.setGpsFirst(true);//设置GPS定位优先
            mOption.setHttpTimeOut(30000);//设置网络请求超时时间
            mOption.setInterval(10000);//设置定位间隔。默认为2秒
            mOption.setNeedAddress(true);//设置是否返回逆地理地址信息。默认是true
            mOption.setOnceLocation(false);//设置是否单次定位。默认是false
            AMapLocationClientOption.setLocationProtocol(AMapLocationClientOption.AMapLocationProtocol.HTTP);//设置网络请求的协议。可选HTTP或者HTTPS。默认为HTTP
            mOption.setLocationCacheEnable(false); //设置是否使用缓存定位,默认为true
            return mOption;
        }
    
        AMapLocationListener locationListener = new AMapLocationListener() {
            @Override
            public void onLocationChanged(AMapLocation loc) {
                Log.e("locationListener--------------------------------------",loc.toString());
                if (null != loc) {
                    if(loc.getLongitude()!=0.0 && loc.getLatitude() != 0.0){
                        requestServer(loc.getLongitude(),loc.getLatitude());
                    }
                }
            }
        };
    }
    
    
    展开全文
  • Linux系统SSH客户端断开后保持进程继续运行配置方法 在Linux系统中,通常我们在执行一些运行时间比较长的任务时,必须等待执行完毕才能断开SSH连接或关闭客户端软件,否则可能会导致执行中断。本文介绍几种保障程序...

    Linux系统SSH客户端断开后保持进程继续运行配置方法

    在Linux系统中,通常我们在执行一些运行时间比较长的任务时,必须等待执行完毕才能断开SSH连接或关闭客户端软件,否则可能会导致执行中断。本文介绍几种保障程序在用户退出登录后持续运行的方法。

    可参见:阿里云帮助

    展开全文
  • Android启动时,会发出一个系统广播 ACTION_BOOT_COMPLETED,它的字符串常量表示为 “android.intent.action.BOOT_COMPLETED” 开机自启动程序,只需要“捕捉”到...4 运行结果 重启手机后,自动弹出启动的程序:

    Android启动时,会发出一个系统广播 ACTION_BOOT_COMPLETED,它的字符串常量表示为 “android.intent.action.BOOT_COMPLETED”

    开机自启动程序,只需要“捕捉”到这个消息再启动你的程序即可,我们要做的是接收这个消息,并实现一个BroadcastReceiver。

    1 xml 配置

    在AndroidManifest.xml中Application节点内,添加自定义的广播类:

    [html] view plain copy
    print?

    <receiver android:name=".BootReceiver" >  
        <intent-filter>  
            <action android:name="android.intent.action.BOOT_COMPLETED" />  
    
            <category android:name="android.intent.category.LAUNCHER" />  
        </intent-filter>  
    </receiver>  
    

    在AndroidManifest.xml中manifest节点内,添加开机启动权限:

    2 自定义广播类 BootReceiver
    [java] view plain copy
    print?

    public class BootReceiver extends BroadcastReceiver {  
        @Override  
        public void onReceive(Context context, Intent intent) {  
            if(intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {     // boot  
                Intent intent2 = new Intent(context, MainActivity.class);  
    //          intent2.setAction("android.intent.action.MAIN");  
    //          intent2.addCategory("android.intent.category.LAUNCHER");  
                intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
                context.startActivity(intent2);  
            }  
        }  
    }  
    

    3 Activity

    [java] view plain copy
    print?

    public class MainActivity extends Activity {  
        @Override  
        public void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.main);  
        }  
    }  
    

    4 运行结果

    重启手机后,自动弹出启动的程序:

    展开全文
  • 如何使应用保持后台运行

    千次阅读 2016-01-10 18:14:00
    操作系统会允许这个应用程序在后台保持运行状态(能够持续的时间是不确定)   UIBackgroundTaskIdentifier taskID = [application beginBackgroundTaskWithExpirationHandler :^{   // 后台...

    1.在plist文件中设置后台模式   增加 Required background modes -> App plays audio or streams audio/video using AirPlay

    2.设置

    /**

     *  程序进入后台的时候调用

     */

    - (void)applicationDidEnterBackground:(UIApplication *)application

    {

        // 提醒操作系统:当前这个应用程序需要在后台开启一个任务

        // 操作系统会允许这个应用程序在后台保持运行状态(能够持续的时间是不确定)

        UIBackgroundTaskIdentifier taskID = [application beginBackgroundTaskWithExpirationHandler:^{

            // 后台运行的时间到期了,就会自动调用这个block

            [application endBackgroundTask:taskID];

        }];

    }

    *3.如果要为应用争取更多的后台应用时间,可以采用后台循环播放 0kb的音乐文件

    设置

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    {

        AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:@"" error:@""];

        

        player.numberOfLoops = -1//设置无限循环播放

        [player prepareToPlay];  //设置缓冲

        [player play];

    }


    展开全文
  • https://blog.csdn.net/super_man_ww/article/details/52604635https://blog.csdn.net/Kun__kun/article/details/51072592
  • 如何保持service长期在后台运行

    千次阅读 2015-03-27 16:52:58
    android 一直运行的后台服务是不存在的,而且也不是最佳实践,因为一直运行的后台服务会耗费大量系统资源,影响其他程序的响应从而影响到用户体验。 可以考虑使用如下几种方案来达到一直运行的效果。 1. 调用...
  • 然而在开发Android程序时,有时候在程序运行的时候,不能系统休眠,否则有一些运行会停止,因此我们需要设置禁止休眠。 Android中设置禁止休眠有两种方式: 1. 在View中设置FLAG_KEEP_SCREEN_ON。 ...
  • DOS批处理开机自动运行常用软件

    千次阅读 2015-09-27 16:36:08
    最近一直在完成某一份文档, 每次开机都要打开那几个软件, 文件夹等, 有点繁琐, 所以就利用DOS处理实现了开机自动完成这些工作, 好开机即进入工作状态,  效果:  开机自动打开QQ(设自动登录), 文档, notepad, 两...
  • 就可以一直保持程序在唤醒的状态 别忘了加上权限 < uses-permission android :name= "android.permission.WAKE_LOCK" /> 当然还有可以把操作放到service中 大家可以去看一下原理 ...
  • MAC下保持程序后台运行不被干掉

    千次阅读 2018-02-12 10:31:53
    # MAC keep aliving if platform.system( ) != 'Windows': import appnope appnope.nope( )
  • 如何你的App永远在后台存活:对Android进程守护、闹钟后台被杀死的研究。 最近公司要求要做一个提醒功能,一说到提醒,那肯定就和闹钟差不多的意思,那么肯定就要用到AlarmManager。 但是,我们知道,android...
  • Matlab的Notebook软件工具设置及程序运行 博战捷 摘 要 介绍了在Matlab中如何设置Notebook软件工具,将Matlab程序嵌入中文Word。举例说明了中文Word中Matlab程序的运行注意事项及结果。关键词 软件应用;Matlab...
  • Jmeter在Linux下的运行测试

    万次阅读 多人点赞 2019-07-31 19:28:37
    用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 1.1、JMeter的作用 1.能够对HTTP和FTP服务器进行压力和性能测试, 也可以对任何数据库进行同样的测试(通过JDBC)。 2.完全的可...
  • 如何cpu满负载运行

    千次阅读 2019-09-26 15:29:08
    如何cpu满负载运行 测试时如何能cpu满负载运行呢? for i in `seq 1 $(cat /proc/cpuinfo |grep "physical id" |wc -l)`; do dd if=/dev/zero of=/dev/null & done 说明: cat /proc/cpuinfo |grep ...
  • 【最全】软件测试基础理论选择题(含答案)

    万次阅读 多人点赞 2020-03-05 19:17:40
    A、试验性运行软件 B、发现软件错误 C、证明软件正确 D、找出软件中全部错误 【答案】B 2、下面说法正确的是( ) A、经过测试没有发现错误说明程序正确 B、测试的目标是为了证明程序没有错误 C、成功的测试是发现了...
  • 问:软件测试的原则? 答:https://blog.csdn.net/weixin_30363263/article/details/102986878 问:你在测试中发现了一个 bug ,但是开发经理认为这不是一个 bug ,你应该怎样解决。 1、将问题提交到缺陷...
  • 使用Mono.NET程序跨平台运行

    万次阅读 2016-05-03 14:49:39
    传统的针对不同平台进行开发的方式常常开发者顾此失彼,难以保证应用程序在不同的平台都有着相同的、出色的体验,这种情况下寻找到一种跨平台开发的方式将会为解决这个问题找到一种思路。从目前的开发环境来看,...
  • 程序后台运行的几种方法

    千次阅读 2016-06-14 16:16:56
    如何命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问题。 nohup/setsid/& 场景: 如果只是临时有一个命令需要长时间运行,...
  • 软件工程导论—软件测试

    万次阅读 多人点赞 2020-05-13 21:26:49
    1. 软件测试基础 2. 单元测试 3. 集成测试 4. 确认测试 5. 白盒测试技术 6. 黑盒测试技术 7. 调试 8. 软件可靠性
  • 如何在关闭ssh连接的情况下,程序继续运行?对Unix,Linux类服务器维护经常是通过ssh完成的,而有些操作比较费时,如更新程序等。此时如果断开ssh连接的话,更新程序就会随之被中断。如何保证断开ssh后仍旧能保持...
  • iOS程序一直在后台运行

    千次阅读 2016-12-23 00:01:19
    那么如何保证一个应用程序进入后台以后一直保持活跃呢??通常最常见的方法就是在后台播放一段音频(没有声音),因为AVPlayer这个类进入后台以后可以保证程序不死。 首先我们需要在- (BOOL)application:...
  • 软件】SecureCRT8.3.0软件及注册码

    万次阅读 2019-05-07 16:57:22
    2)保持SecureCRT软件关闭,同时也要关闭杀毒软件运行的话会提示你正在运行的,关闭就好)。 3)将注册机拷贝到你的CRT软件的安装的目录下; 4)点击【Patch】按钮,会你选择文件 ...
  • 单片机C语言的主程序,通常要用一个while(1)语句来程序进入一个无限循环,目的是为了程序一直保持在我们需要运行的情况下。 虽然这种做法毋庸置疑,在网上还是有不少朋友有疑问,如果程序不加while(1)会出现...
  • 一、为什么要使程序在后台执行 最近刚刚入手在做一个远程通信的项目,利用套接字实现长连接通信。那么问题来了,我的服务端程序怎么才能一直在服务器上运行以达到随时监测用户请求的目的呢?...2:程序在后台跑后...
  • ubuntu下apt-get install安装软件, 报“无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系”,今天终于找到解决方法了。 一般出现这种情况的原因时 要装A, 依赖B, 但是已经安装的...
  • 程序在后台运行运行时把程序放入后台把程序做成服务 参考: https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/index.html https://www.tecmint.com/create-new-service-units-in-systemd/ 运行时把程序放...
  • 从CSDN各个博客上摘选的一些容易做错的嵌入式软件的笔试题,做一下记录,自己记住。 文章转自:嵌入式经典面试题。 1、用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) 解答:这一...
  • 软件测试

    千次阅读 2010-06-16 18:29:00
    软件测试就是利用测试工具按照... 软件测试概念 使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别. 它是帮助识别开发完成(中间或最终的版本)
  • 怎么 Android 程序一直后台运行

    千次阅读 2016-10-25 16:37:56
    Service设置成START_STICKY,kill 后会被重启(等待5秒左右),重传Intent,保持与重启前一样​通过 startForeground将进程设置为前台进程,做前台服务,优先级和前台应用一个级别​,除非在系统内存非常缺,否则此...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 373,116
精华内容 149,246
关键字:

如何让软件保持运行