精华内容
下载资源
问答
  • 如何使应用保持后台运行

    千次阅读 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];

    }


    展开全文
  • Unity 导出安卓让应用后台运行

    千次阅读 2017-07-04 17:28:31
    1.点击home键进入后台运行: 在AndroidManifest 中加入 : android:configChanges=”fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|...

    1.点击home键进入后台运行:
    在AndroidManifest 中加入 :

    android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"

    这里写图片描述


    2.点击back键也进入到后台运行,只需要在点击返回键的时候调用安卓这边的方法。

       static public void onExit()
        {
            Activity unityActivity = UnityPlayer.currentActivity;
            unityActivity.moveTaskToBack(false);
        }

    主要是moveTaskToBack(false)方法,unity这边如何调用可以按自己的习惯进行编写

    展开全文
  • 如何你的App永远在后台存活:对Android进程守护、闹钟后台被杀死的研究。 最近公司要求要做一个提醒功能,一说到提醒,那肯定就和闹钟差不多的意思,那么肯定就要用到AlarmManager。 但是,我们知道,android...

    如何让你的App永远在后台存活:对Android进程守护、闹钟后台被杀死的研究。

    最近公司要求要做一个提醒功能,一说到提醒,那肯定就和闹钟差不多的意思,那么肯定就要用到AlarmManager。

    但是,我们知道,android系统很坑爹,不同的厂商对rom的定制,导致对进程的管理都不太相同,但是如何做到在各个手机上都能一直保持后台执行呢?。

    为了解决这个问题,特地去研究了各种保持进程不被杀死的方法。

    下面对几种常见的用法进行了分析,并且给出了我自己发现的一个保持进程运行的方法。

    方法1:在原生的Android系统上使用AlarmManager

    方法2:通过AIDL实现双进程守护机制

    方法3:MarsDaemon第三方库,实现进程常驻

    方法4:通过AppWiget,android桌面小组件保持进程的运行

    下面是具体分析

    方法1:在原生的Android系统上使用AlarmManager

    “原生”这个词就对这个方法的限定很大了。我尝试了很多次,在原生的操作系统中,不需要特殊的去调用service处理。直接在某个Activity中通过AlarmManager的set和setRepeating方法设置定时后,就去杀了进程,测试结果显示,闹钟还是可以继续响的。但是这种不去特殊处理的,在第三方的rom基本都是不行的,相信大家每人敢用,因此知道就可以了

    方法2:通过AIDL实现双进程守护机制

    网上有很多关于AIDL实现双进程守护机制的文章,内容都是差不多,关于这种方法,都是通过在MainFest文件中指定某个Service android:process=":remote",这样就可以使这个service单开一个进程来运行。在主进程中有一个MainService,一旦RemoteService所在进程被杀死,MainService就会立刻去重新启动它,同样的,当MainService被杀死了,RemoteService就会去启动MainService,两个进程的两个Service互相监控来实现进程不销毁。

    大致方法为:

    1、创建一个IMyAIDLInterface.aidl文件

    [java]

    //IMyAidlInterface.aidl

    packagecom.xiaoqi.alarmmanagerdemo;

    interfaceIMyAidlInterface{

    StringgetServiceName();

    }

    2、创建一个LocalService:

    [java]

    publicclassLocalServiceextendsService{

    MyBinderbinder;

    MyConnconn;

    @Nullable

    @Override

    publicIBinderonBind(Intentintent){

    returnbinder;

    }

    @Override

    publicvoidonCreate(){

    super.onCreate();

    binder=newMyBinder();

    conn=newMyConn();

    }

    classMyBinderextendsIMyAidlInterface.Stub{

    @Override

    publicStringgetServiceName()throwsRemoteException{

    returnLocalService.class.getSimpleName();

    }

    }

    @Override

    publicintonStartCommand(Intentintent,intflags,intstartId){

    Toast.makeText(LocalService.this,"本地服务活了",Toast.LENGTH_SHORT).show();

    this.bindService(newIntent(LocalService.this,RomoteService.class),conn,Context.BIND_IMPORTANT);

    returnSTART_STICKY;

    }

    classMyConnimplementsServiceConnection{

    @Override

    publicvoidonServiceConnected(ComponentNamename,IBinderservice){

    Log.i("yangqing","绑定上了远程服务");

    }

    @Override

    publicvoidonServiceDisconnected(ComponentNamename){

    Log.i("yangqing","远程服务被干掉了");

    Toast.makeText(LocalService.this,"远程服务挂了",Toast.LENGTH_SHORT).show();

    //开启远程服务

    LocalService.this.startService(newIntent(LocalService.this,RomoteService.class));

    //绑定远程服务

    LocalService.this.bindService(newIntent(LocalService.this,RomoteService.class),conn,Context.BIND_IMPORTANT);

    }

    }

    @Override

    publicvoidonDestroy(){

    super.onDestroy();

    //开启远程服务

    LocalService.this.startService(newIntent(LocalService.this,RomoteService.class));

    //绑定远程服务

    LocalService.this.bindService(newIntent(LocalService.this,RomoteService.class),conn,Context.BIND_IMPORTANT);

    }

    }

    3、创建一个RemoteService:

    [java]

    publicclassRomoteServiceextendsService{

    MyConnconn;

    MyBinderbinder;

    @Nullable

    @Override

    publicIBinderonBind(Intentintent){

    returnbinder;

    }

    @Override

    publicvoidonCreate(){

    super.onCreate();

    conn=newMyConn();

    binder=newMyBinder();

    }

    @Override

    publicintonStartCommand(Intentintent,intflags,intstartId){

    Toast.makeText(this,"远程服务活了",Toast.LENGTH_SHORT).show();

    this.bindService(newIntent(this,LocalService.class),conn,Context.BIND_IMPORTANT);

    returnSTART_STICKY;

    }

    classMyBinderextendsIMyAidlInterface.Stub{

    @Override

    publicStringgetServiceName()throwsRemoteException{

    returnRomoteService.class.getSimpleName();

    }

    }

    classMyConnimplementsServiceConnection{

    @Override

    publicvoidonServiceConnected(ComponentNamename,IBinderservice){

    Log.i("yangqing","绑定本地服务成功");

    //Toast.makeText(RomoteService.this,"绑定本地服务成功",Toast.LENGTH_SHORT).show();

    }

    @Override

    publicvoidonServiceDisconnected(ComponentNamename){

    Log.i("yangqing","本地服务被干掉了");

    Toast.makeText(RomoteService.this,"本地服务挂了",Toast.LENGTH_SHORT).show();

    //开启本地服务

    RomoteService.this.startService(newIntent(RomoteService.this,LocalService.class));

    //绑定本地服务

    RomoteService.this.bindService(newIntent(RomoteService.this,LocalService.class),conn,Context.BIND_IMPORTANT);

    }

    }

    @Override

    publicvoidonDestroy(){

    super.onDestroy();

    //开启本地服务

    RomoteService.this.startService(newIntent(RomoteService.this,LocalService.class));

    //绑定本地服务

    RomoteService.this.bindService(newIntent(RomoteService.this,LocalService.class),conn,Context.BIND_IMPORTANT);

    }

    }

    4、在AndroidMainfest文件中注册:

    [html]

    使用方法:

    [java]

    Intentservice=newIntent(this,LocalService.class);

    startService(service);

    IntentremoteService=newIntent(this,RomoteService.class);

    startService(remoteService);

    这样就可以了,但是经过测试发现,我们在应用管理中,会发现确实有两个进程,我们单独的去关闭一个,另一个马上就会把它开启,但是如果我们之间去杀进程,发现只有在vivo手机中,确实可以保持不被杀死,但是在其他手机中,整个后台进程还是被杀死了。说明这个方法也不是很可靠的。

    方法3:MarsDaemon第三方库,实现进程常驻

    地址:https://github.com/Marswin/MarsDaemon

    守护进程也有第三方库,相信很多人都没想到吧

    这个库的使用也非常简单,底层通过jni来实现了进程守护,这边就不给出使用方法了,直接在github上看就行了。

    但是我实际使用发现,在华为机器上依然不能进程保持运行,只要一清理,后台的闹钟就没有效果了。但是在某些机型上还是可以用的,可靠性比通过AIDL的双进程守护效果好,可是依然不能保证运行。

    方法4:通过AppWiget,android桌面小组件保持进程的运行

    尝试了网上的很多方法,都是进程一清理,所以程序都被停止了,尤其在华为手机上,360都没法保持一直运行,因此我觉得这个想让后台服务永久运行的想法越来越不可靠。

    我在应用商店上下载了一个排行第一的闹钟软件,但是经过多次测试,结果都是一样,想要后台进行,基本是不可能。QQ是通过一个像素点,一直显示在最前,这种黑科技来保持进程一直在,于是我想到了,如果我们添加一个桌面组件来,这样这个组件也是App的一部分, 但它却一直运行在那,这样是否就可以让进程杀死了,程序还是能运行呢?

    于是我测试了一下,写了一个很简单AppWidget组件,在AppWifgetProvider中,写了一个简单的闹钟程序,并且让AppWidget中的TextView的数字一直自增1。写完之后我测了一下,发现这个方法是可行的。即使是在华为手机上,我把进程清理了,闹钟还是会响,AppWidget上的数字也一直在更新。

    关于AppWidget的写法网上也很多,这边就不具体给出了。在测试这个方法的时候,我发现刚刚下载的闹钟软件也有桌面小组件,我添加了之后,再进行闹钟测试,居然发现,在进程杀死后,闹钟居然可以继续执行,即使是锁屏状态,很明显,这个软件使用的方法和我想到的是一样的。

    通过AppWidget来保持进程中代码的执行,这个应该还其他博客中还没有被提到,这个方法相比其他的方法而言,已经是非常可靠的了。但是这个局限也挺大,就是必须通过一个AppWidget来实现。

    关于进程守护已经分析完了,如果有什么更好的方法,欢迎大家分析。

    展开全文
  • 上一篇 linux(centOS)下搭建node服务器二、 使用koa2搭建项目 讲述了如何使用koa2搭建项目,本篇讲述使用pm2管理node应用程序和保持后台运行node应用 一、安装pm2 全局安装pm2: npm install -g pm2 安装完成...

    上一篇 linux(centOS)下搭建node服务器二、 使用koa2搭建项目 讲述了如何使用koa2搭建项目,本篇讲述使用pm2管理node应用程序和保持后台运行node应用

    一、安装pm2

    全局安装pm2:
    npm install -g pm2
    
    安装完成查看帮助命令(pm2 -h)报错:
    -bash:pm2:command not found
    
    执行:
    ln -s /root/node/bin/pm2 /usr/sbin/pm2
    再试就OK了

    二、开启应用后台运行

    这里使用基于koa-generator模板创建的项目web1。具体见上篇第四条方法二 

    进入web1项目:
    一般我们都是通过npm start启动koa2应用,其实就是调用node ./bin/www。那么,换成pm2就是
    pm2 start ./bin/www --watch
    要截图备用,后面关闭、查看等操作时用id等比较方便

    注意:端口号默认3000,在www文件15行。这里修改为3001

    停用项目
    1.根据项目id停用:
    pm2 stop 0
    
    2.使用项目名称name:
    pm2 stop www
    
    3.使用js文件停用
    pm2 stop ./bin/www

    再次启用:pm2 start 0
    第一次启动新应用时没有id不能这样使用

     

    设置开机自动启动应用:
    1.pm2 save  保存当前进程状态。
    2.pm2 startup 生成开机自启动的命令。
    3.pm2 save 保存
    
    pm2 list查看是否成功
    
    重启服务器测试一下是否能访问。如果能访问表示ok了

    更多pm2操作直通车,不想看英文的同学可以参考博客https://www.cnblogs.com/chyingp/p/pm2-documentation.html

     

    下一篇:linux(centOS)下搭建node服务器四、nginx实现通过域名或特定网址访问项目 

    展开全文
  • Dapr是一个开源、可移植、事件驱动的云原生分布式应用运行时,它使开发人员能够轻松地构建运行在云平台和边缘的弹性而微服务化的无状态和有状态的应用程序,从而降低基于微服务架构构建现代云原生应用的准入门槛。...
  • 退回后台是执行了home键,activity分别执行了onPause和onStop,应用没有被销毁,退回后台而已,再次运行应用只要执行onResume就可以了。  完全退出,执行finish,activity会执行onPause,onStop和on
  • Spark应用运行流程

    千次阅读 2017-04-10 22:06:14
    Application:应用,即用户需要完成的应用程序。一般来说,这部分代码需要用户根据自己的需求来完成。这部分代码主要包括两部分:Driver和Executor。 Driver:顾名思义,驱动者,为Application准备运行环境,驱动并...
  • Android后台服务在屏幕休眠保持运行

    千次阅读 2020-05-05 20:27:31
    Android App中的Service可以保持后台运行,比如音乐播放就是Service的典型应用,在开发移动APP时,很多业务场景需要用到Service保持在后台运行,在实现过程中Service在屏幕休眠下继续保持运行,往往没有按照预期...
  • 网上关于保证Service在后台持续运行的方法有很多,但有些其实作用并不大,仅适合原生系统 实际Service的运行,不完全是由代码控制的,很大程度上取...在系统设置-启动管理里面,允许应用后台运行运行应用自启动 ...
  • iOS应用程序运行原理及各步骤解析

    千次阅读 2015-09-01 10:20:12
    1. Not running:应用还没有启动,或者应用正在运行但是途中被系统停止。 [码农也需要休息吧,不能每天无休止的干下去,万一哪天来个猝死,老婆孩子怎么办,父母怎么办?中国有哪个公司一样,能像Google一样替你...
  • //点击通知栏跳转到相应的应用里面 Intent intent = new Intent( this , MainActivity. class ); //这一句加不加没什么影响 // intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); notification....
  • 停止运行-应用程序已经终止,或者还未启动。 不活动-应用程序处于前台但不再接收事件(例如,用户在app处于活动时锁住了设备)。 活动-app处于“使用中”的状态。 后台-app不再屏幕上显示,但它仍然执行代码。 ...
  • iOS 保持APP在后台长时间运行

    万次阅读 2018-12-05 15:10:34
    官方网站: ...一、iOS 应用程序5个状态 1、停止运行-应用程序已经终止,或者还未启动。 2、不活动-应用程...
  • 在外部tomcat中运行spring boot应用

    千次阅读 2017-07-26 10:21:21
    在外部tomcat中运行spring boot应用
  • Chrome 在后台运行

    万次阅读 2019-11-15 09:45:53
    如何谷歌浏览器(google chrome)在后台运行 打开谷歌浏览器(google chrome),点击小编红框标记位置,点击设置: 用鼠标下滑到最底部,点击显示高级设置: 继续滚动鼠标到最底部,勾选 “关闭 google chrome 后...
  • Spring Boot非Web项目保持运行的方法

    千次阅读 2020-06-11 15:31:41
    有时候一些项目并不需要提供 Web 服务,例如跑定时任务的项目,如果都按照 Web 项目启动未免画蛇添足浪费资源为了达到非 Web 运行的效果,首先调整 Maven 依赖,不再依赖 spring-boot-starter-web,转而依赖最基础的...
  • ...IOS实现Voip应用后台运行需要的几个配置项 作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/8815590 转载请注明出处 如果觉得文章对你有所帮
  • 3.0、Android Studio构建和运行应用

    千次阅读 2016-06-24 14:44:40
    在Instant Run的帮助下,你可以将更改的方法或资源文件直接推送到一个运行的app而无需构建一个新的APK...Android Studio会你选择一个部署目标(一个虚拟机或者一个连接的设备),使用Gradle进行构建,构建完成后将部
  • 如果您要构建 Node.js 应用程序,那么可以使用 IBM® ...执行更改后,您可以立即在运行中的 Bluemix 应用程序中看到该更改。Bluemix Live Sync 可从命令行以及在 Web IDE 中运行。您可以使用 Bluemix Live Sync 来调试
  • 思考这个问题的起因是在业务中...1. 应用运行在后台, 则打开应用后, 界面保持应用最后展示的界面。 2. 应用未开启,则重新启动。 在网上没有找到合适的解决方案, 自己的解决方案参看以下代码: /** * 打开应用.
  •         ...然后,我将向您展示如何在Android模拟器或实际设备(在本例中为Kindle Fire平板电脑)上设置和运行应用程序。我还将向您展示如何解决Androi
  • 考虑到我们是请一些人帮忙装上应用的,所以主要是想用户将应用添加到保护名单中,来保证应用正常运行时能够长不被清理掉。 【功能】Service做的事情包括:监听亮屏息屏、获取加速度传感器数据、调用百度SDK获取...
  • 起因   使用MoinMoin Desktop Edition已经有一段时间了,每次开机都得运行...其实这种方法同样可以用于其它需要保持运行,但又不想看见窗口的软件。   原理   利用VBScript创建wscript.shell对象,运行一个
  • 你想过当客户访问次数剧增时,你的WEB应用能承受日益增加的访问量吗?本文讲述了调整JSP和servlet的一些非常实用的方法,它可使你的servlet和JSP页面响应更快,扩展性更强。而且在用户数增加的情况下,系统负载会...
  • ssh关闭后仍保持当前运行的进程

    千次阅读 2015-10-28 22:11:11
    ssh关闭后仍保持当前运行的进程   症状:使用SecureCRT工具ssh远程连接linux,不退出ssh,而是强行关闭终端(合上笔记本走人)情况下,后台启动的应用也会关闭。 测试案例: 很明显的是关闭终端后,...
  • 一些体验上的优化一:app 退出时, app 在后台运行...一:app 退出时, app 在后台运行,类似于 home 键的功能,最小化 重写 onkeydown 和 onBackPressed 方法,主要是 movetoBack 方法。 注意在 MainActivity ...
  • 如果APP需要后台驻留,用户返回到首页时会提示退出操作,我们可以不退出而是隐藏至后台,这样的话APP就会在后台运行,以下代码须写在main.js里面,弹出的内容可自定义设置。 let main = plus.android....
  • 如何优雅地恢复运行中的容器应用

    千次阅读 2020-09-24 10:58:23
    本文来自Rancher Labs 作者简介 鞠宏超,Rancher研发工程师。...随着云原生应用的普及,越来越多的服务提供容器运行时,数据的持久化存储问题渐渐显现出来,我们要做的不仅仅是数据的持久化,还要考虑备份的准确性,迁
  • Android启动时,会发出一个系统广播 ACTION_BOOT_COMPLETED,它的字符串常量表示为 “android.intent.action.BOOT_COMPLETED” 开机自启动程序,只需要“捕捉”到...4 运行结果 重启手机后,自动弹出启动的程序:

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 711,398
精华内容 284,559
关键字:

如何让应用保持运行