我有一个应用程序,它有一个Activity,用作常规GUI和一个服务.我的活动有两个按钮.一个按钮停止进程,一个按钮终止进程.我分别使用这些方法来启动和停止我的进程:
Intent i = null;
Button start;
Button stop;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
i = new Intent(this, Service.class);
start = (Button) findViewbyId(R.id.start_button);
stop = (Button) findViewById(R.id.stop_button);
start.setOnClickListener(new OnClickListener(){
public void onClick(){
startService(i);
}
}
stop.setOnClickListener(new OnClickListener(){
public void onClick(){
stopService(i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
此服务不受actvivty或app的约束.我在Manifest中配置了这样的服务:
<service
android:name="com.example.mypackage.Service"
android:process=":remote">
<intent-filter>
<action
android:name="com.example.mypackage.Service" />
</intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)
当我启动服务时,它独立运行在其他任何东西上.这意味着,当我启动服务和onDestroy()应用程序时,服务仍在运行.我可以看到它仍在运行,因为通过adb,我运行ps命令,它说它是.
问题是我打电话的时候stopService(intent).当我stopService(intent)从活动方面调用时,它将运行onDestroy()服务中设置的代码行,但是当我运行ps时adb,它表示它仍在运行.
我希望能够完全破坏服务.我不确定服务是如何运作的,所以请不要犹豫,采取补救措施.我不确定它是否与我在服务中所做的事情有关.谢谢!
编辑:
当我启动服务时,我使用onStartCommand()并在那里运行一些代码.我也回来START_STICKY了onStartCommand() …
从打印在后台的函数打印输出后,如何自动返回到bash提示符?
例如,当我在bash shell中运行以下脚本时:
fn(){
sleep 10
echo "Done"
exit
}
fn &
运行脚本后,它会立即返回我的提示.10秒后,它会打印"完成",然后在新行上显示一个闪烁的光标:
$ Done ?
脚本不再运行了,但是在我按下之前我没有收到提示Return.
打印"完成"后有没有办法强制返回bash提示符?
一个相关的问题是:是否有办法让后台任务通知终端打印新提示?但是,这个问题询问了一个背景计划.提供有答案适用于程序发送到后台,但似乎并没有为工作函数发送到后台(在我提供的例子).
澄清:我希望保存上面的整个代码片段(例如,as myscript.sh),然后将其作为前台脚本运行(例如,as bash myscript.sh).
编辑:以上当然只是一个MWE.这个问题的背景是:
fn &fn监视队列并tail在作业完成时终止.这里有一些不那么简单的代码:
watch_queue(){
until [ `qstat | grep $job | wc -l` -lt 1 ]; do
sleep 2
done
kill -9 $pid
tput setaf 7
tput setab 0
echo "Hit ENTER to return … 我有这个代码通过运行后台进程来获取推文.以下脚本使用subprocess.Popen函数从主脚本运行.这样主脚本将在调用后台进程脚本后停止执行.
def start_listner(unique_id, keyword, limit=200):
class CustomStreamListener(tweepy.StreamListener):
def __init__(self, api):
logger.info('runnning')
self.api = api
super(tweepy.StreamListener, self).__init__()
#setup rabbitMQ Connection
def on_status(self, status):
print status.text.encode('utf-8'), "\n"
#queue the tweet and writes the tweet to the log
def on_error(self, status_code):
#some code to not kill the stream
def on_timeout(self):
#some code to not kill the stream
sapi = tweepy.streaming.Stream(auth, CustomStreamListener(api))
try:
logger.info('tracking started')
logger.info(keyword)
logger.info(type(keyword))
kw = keyword
sapi.filter(track=[kw]) # keeps listening to the streaming api
except Exception, err:
logger.info(kw) …Run Code Online (Sandbox Code Playgroud) 在其他终端,我会按下Ctrl+z暂停一个应用程序,然后经常发出bg将其发送到后台.
在console2 Ctrl+z中什么都不做,可能是因为组合键在Windows中具有不同的含义.但有没有办法达到同样的效果,除了'过程&'?
(我知道我应该使用&并且它有效,但有时候我会设置shell,启动一个编辑器,开始编辑,然后返回到控制台,发现我忘记了&,我不能使用shell.它让我很烦我然后必须打开一个新的shell并重新设置它,或者退出编辑器,启动它&并重新设置它).
我正在使用Heroku运行PHP应用程序,我需要设置与外部API通信并写入我的数据库的后台工作程序,Heroku有很多关于为Ruby设置工作程序而不是PHP的信息.
使用PHP在Heroku上这很容易实现吗?
我从来没有解决启动后台进程的问题,我似乎找不到任何详细介绍它的文档......
我正在使用Sidekiq进行一些后台处理.
目前我所做的是:
从bundle exec rails s 一个终端开始,然后在另一个终端上启动bundle exec sidekiq,以便sidekiq自己启动并查找要处理的作业.
我想要的是:
一旦我开始bundle exec rails s它也应该启动sidekiq bundle exec sidekiq.我怎样才能将它集成到开发环境中?
我有一个不断回应信息的任务.
例如,如果你执行git clone并且想要将该任务发送到后台(通过使用&符号)
git clone https://github.com/mrdoob/three.js.git &
Run Code Online (Sandbox Code Playgroud)
然后git clone操作不断刷新屏幕,使用git clone进程的新百分比,即:
Receiving objects: 47% (22332/47018), 92.53 MiB | 480 KiB/s 1410/47018), 7.18 MiB | 185 KiB/s
Receiving objects: 53% (24937/47018), 99.40 MiB | 425 KiB/s 1410/47018), 7.18 MiB | 185 KiB/s
Run Code Online (Sandbox Code Playgroud)
所以我不能继续在前台做其他操作,因为这些更新阻止我看到我想写的东西.
你能告诉我们如何有效地将这样一个冗长的任务发送到后台吗?
非常感谢!
我似乎无法在Google或StackOverflow上找到答案.
如何在后台启动进程(在活动窗口后面)?就像,当进程启动时,它不会中断用户正在使用的当前应用程序.
该过程不会在当前应用程序前弹出,它只会启动.
这就是我正在使用的:
Process.Start(Chrome.exe);
Run Code Online (Sandbox Code Playgroud)
当应用程序启动时,Chrome会在我的应用程序前弹出.如何让它在后台启动?
我也尝试过:
psi = new ProcessStartInfo ("Chrome.exe");
psi.UseShellExecute = true;
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.WindowStyle = ProcessWindowStyle.Minimized;
Process.Start(psi);
Run Code Online (Sandbox Code Playgroud)
但是与前一个完全没有区别.
谢谢.
我一直在深入研究这个使用基本计时器检查位置更新的代码.然后我将它发送到服务器的lat/lng.
http://mobileoop.com/background-location-update-programming-for-ios-7 https://github.com/voyage11/Location
当插入并通过XCode连接时,它运行良好,但是当我拔下并移动设备时,操作系统似乎总是在3分钟后完全杀死后台线程.因此,如果我将计时器设置为每30秒运行一次,我将获得~6次更新,直到我将应用程序带到前台.
我已经读过最大后台执行时间是3分钟,但是我看到这个代码在1分钟后重置了后台任务,所以我不知道为什么我会看到这个.
必须有一些解决方法.我能在这做什么吗?
编辑:这帮助我:在iOS9中的CLLocationManager中的allowsBackgroundLocationUpdates