- 浏览: 233238 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (102)
- 开源软件 (1)
- 并发 (14)
- WEB (1)
- NIO (4)
- Socket (5)
- 应用服务器 (4)
- 集群 (0)
- 数据库 (1)
- JAVA基础 (17)
- 开源框架 (2)
- 业务知识 (1)
- JVM (9)
- Windows (1)
- LINUX (0)
- Jquery (0)
- JMS (0)
- Cache (0)
- Oracle (5)
- XML (0)
- EJB (0)
- WebService (0)
- Struts2 (1)
- Hibernate (1)
- Spring (0)
- 设计模式 (4)
- UML (0)
- JS (12)
- 网络爬虫 (0)
- 数据结构与算法 (1)
- EXT (1)
- DIV+CSS (2)
- 安全 (3)
- Android (9)
- LDAP (1)
- Mybatis (1)
最新评论
-
Dom_4j:
...
理解注解中的@Inherited -
s469799470:
demo少个ID
iframe父子页面交互问题 -
errorerror0:
...
iframe父子页面交互问题 -
errorerror0:
iframe父子页面交互问题 -
johnawm:
2012-12-18 wangshibei 写道CountD ...
CountDownLatch的使用
public class MainActivity extends Activity implements OnClickListener {
/** Called when the activity is first created. */
private Button startService,redirectButton;
public static MainActivity mainActivity;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startService=(Button)findViewById(R.id.startButton);
redirectButton=(Button)findViewById(R.id.redirectId);
Log.e("Main", "onCreate======================>") ;
startService(new Intent("com.test.android.SERVICE"));
}
public void onAttachedToWindow () {
System.out.println("Page01 -->onAttachedToWindow");
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId())
{
case R.id.redirectId:
break;
}
}
@Override
protected void onStart()
{
super.onStart();
mainActivity=this;
Log.e("Main", "onStart======================>") ;
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.e("Main", "onStop======================>") ;
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.e("Main", "onResume======================>") ;
if(!SipService.isOnForeground)
this.onStop();
}
}
======
public class SecondActivity extends Activity implements OnClickListener{
private Button closeButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
closeButton=(Button)findViewById(R.id.closeId);
closeButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId())
{
case R.id.closeId:
finish();
if(!SipService.isOnForeground)
{
Log.e("SecondActivity", "begin to close Main");
Log.e("mainActivity", "mainActivity="+MainActivity.mainActivity.isFinishing());
MainActivity.mainActivity.onStop();
}
break;
default:break;
}
}
}
==================
public class SipService extends Service{
private ActivityManager activityManager;
private String packageName;
//应用是否运行在前端
public static boolean isOnForeground=true;
private static Handler handler;
//休眠唤醒锁
private static PowerManager.WakeLock mWakeLock = null;
//唤醒加锁
public static void acquireWakeLock(Context context)
{
if (mWakeLock == null)
{
Log.i("", "Acquiring wake lock");
PowerManager powerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP,
context.getClass().getCanonicalName());
mWakeLock.acquire();
}
}
@Override
public void onCreate()
{
super.onCreate();
Log.e("SipService", "------------->service---onCreate!!!");
//acquireWakeLock(this.getApplicationContext());
acceptHandler();
Timer timer=new Timer();
timer.schedule(task,5000,60000);
// audioManager = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);
// audioManager.setMode(AudioManager.MODE_IN_CALL);
// Log.e("SipService", "onCreate ----------> AudioManager.setMode(AudioManager.MODE_IN_CALL)");
// SystemUtil.setMicrophoneMute(false);
// SystemUtil.getSpeakerphoneVolume();
}
TimerTask task=new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
Message message=new Message();
message.what=1;
SipService.handler.sendMessage(message);
}
};
@Override
public void onDestroy()
{
super.onDestroy();
Log.e("sipService", "------------->service---onDestroy!!!");
//releaseWakeLock();
// audioManager.setMode(AudioManager.MODE_NORMAL);
// Log.e("SipService", "onStop ----------> AudioManager.setMode(AudioManager.MODE_NORMAL)");
}
@Override
public void onStart(Intent intent, int startId)
{
super.onStart(intent, startId);
}
//释放唤醒锁
public static void releaseWakeLock()
{
if (mWakeLock != null && mWakeLock.isHeld())
{
Log.i("", "release wake lock");
mWakeLock.release();
mWakeLock = null;
}
}
//判断 应用是否运行在前端
private boolean isAppOnForeground() {
// Returns a list of application processes that are running on the device
List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
if (appProcesses == null) return false;
for (RunningAppProcessInfo appProcess : appProcesses) {
if (appProcess.processName.equals(packageName)
&& appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
return true;
}
}
return false;
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
private void acceptHandler(){
Handler accHandler= new Handler()
{
@Override
public void handleMessage(Message msg)
{
super.handleMessage(msg);
switch (msg.what)
{
case 1:
{
activityManager = (ActivityManager)SipService.this.getSystemService(Context.ACTIVITY_SERVICE);
packageName =SipService.this.getPackageName();
//应用是否运行在前端
isOnForeground=isAppOnForeground();
Log.e("SipService", "isOnForeground="+isOnForeground);
//如果在前台运行
if(!isOnForeground)
{
Bundle bundle = new Bundle();
Intent intent = new Intent();
intent.putExtras(bundle);
//intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
intent.setClass(getApplicationContext(),SecondActivity.class);
startActivity(intent);
}
break;
}
}
}
};
SipService.handler=accHandler;
}
}
============
public class SipServiceManager extends BroadcastReceiver{
@Override
public void onReceive(Context arg0, Intent arg1) {
Log.e("","-------BroadcastReceiver--> " + arg1.getAction());
//开机
if(arg1.getAction().toString().equals(Intent.ACTION_BOOT_COMPLETED)){
arg0.startService(new Intent("cn.zte.sip.SERVICE"));
}
//关机
else if(arg1.getAction().toString().equals(Intent.ACTION_SHUTDOWN)){
arg0.stopService(new Intent("cn.zte.sip.SERVICE"));
}
}
}
============
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:text="启动Service"
android:id="@+id/startButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:text="转向按钮"
android:id="@+id/redirectId"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
==================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:text="转向Main界面"
android:id="@+id/redirectId2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:text="关闭本界面"
android:id="@+id/closeId"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
======
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test.android"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<service android:name="com.test.android.SipService">
<intent-filter>
<action android:name="com.test.android.SERVICE" />
</intent-filter>
</service>
<receiver android:name="com.test.android.SipServiceManager" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.ACTION_SHUTDOWN" />
</intent-filter>
</receiver>
<activity android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SecondActivity" android:screenOrientation="landscape" />
</application>
</manifest>
/** Called when the activity is first created. */
private Button startService,redirectButton;
public static MainActivity mainActivity;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startService=(Button)findViewById(R.id.startButton);
redirectButton=(Button)findViewById(R.id.redirectId);
Log.e("Main", "onCreate======================>") ;
startService(new Intent("com.test.android.SERVICE"));
}
public void onAttachedToWindow () {
System.out.println("Page01 -->onAttachedToWindow");
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId())
{
case R.id.redirectId:
break;
}
}
@Override
protected void onStart()
{
super.onStart();
mainActivity=this;
Log.e("Main", "onStart======================>") ;
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.e("Main", "onStop======================>") ;
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.e("Main", "onResume======================>") ;
if(!SipService.isOnForeground)
this.onStop();
}
}
======
public class SecondActivity extends Activity implements OnClickListener{
private Button closeButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
closeButton=(Button)findViewById(R.id.closeId);
closeButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId())
{
case R.id.closeId:
finish();
if(!SipService.isOnForeground)
{
Log.e("SecondActivity", "begin to close Main");
Log.e("mainActivity", "mainActivity="+MainActivity.mainActivity.isFinishing());
MainActivity.mainActivity.onStop();
}
break;
default:break;
}
}
}
==================
public class SipService extends Service{
private ActivityManager activityManager;
private String packageName;
//应用是否运行在前端
public static boolean isOnForeground=true;
private static Handler handler;
//休眠唤醒锁
private static PowerManager.WakeLock mWakeLock = null;
//唤醒加锁
public static void acquireWakeLock(Context context)
{
if (mWakeLock == null)
{
Log.i("", "Acquiring wake lock");
PowerManager powerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP,
context.getClass().getCanonicalName());
mWakeLock.acquire();
}
}
@Override
public void onCreate()
{
super.onCreate();
Log.e("SipService", "------------->service---onCreate!!!");
//acquireWakeLock(this.getApplicationContext());
acceptHandler();
Timer timer=new Timer();
timer.schedule(task,5000,60000);
// audioManager = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);
// audioManager.setMode(AudioManager.MODE_IN_CALL);
// Log.e("SipService", "onCreate ----------> AudioManager.setMode(AudioManager.MODE_IN_CALL)");
// SystemUtil.setMicrophoneMute(false);
// SystemUtil.getSpeakerphoneVolume();
}
TimerTask task=new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
Message message=new Message();
message.what=1;
SipService.handler.sendMessage(message);
}
};
@Override
public void onDestroy()
{
super.onDestroy();
Log.e("sipService", "------------->service---onDestroy!!!");
//releaseWakeLock();
// audioManager.setMode(AudioManager.MODE_NORMAL);
// Log.e("SipService", "onStop ----------> AudioManager.setMode(AudioManager.MODE_NORMAL)");
}
@Override
public void onStart(Intent intent, int startId)
{
super.onStart(intent, startId);
}
//释放唤醒锁
public static void releaseWakeLock()
{
if (mWakeLock != null && mWakeLock.isHeld())
{
Log.i("", "release wake lock");
mWakeLock.release();
mWakeLock = null;
}
}
//判断 应用是否运行在前端
private boolean isAppOnForeground() {
// Returns a list of application processes that are running on the device
List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
if (appProcesses == null) return false;
for (RunningAppProcessInfo appProcess : appProcesses) {
if (appProcess.processName.equals(packageName)
&& appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
return true;
}
}
return false;
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
private void acceptHandler(){
Handler accHandler= new Handler()
{
@Override
public void handleMessage(Message msg)
{
super.handleMessage(msg);
switch (msg.what)
{
case 1:
{
activityManager = (ActivityManager)SipService.this.getSystemService(Context.ACTIVITY_SERVICE);
packageName =SipService.this.getPackageName();
//应用是否运行在前端
isOnForeground=isAppOnForeground();
Log.e("SipService", "isOnForeground="+isOnForeground);
//如果在前台运行
if(!isOnForeground)
{
Bundle bundle = new Bundle();
Intent intent = new Intent();
intent.putExtras(bundle);
//intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
intent.setClass(getApplicationContext(),SecondActivity.class);
startActivity(intent);
}
break;
}
}
}
};
SipService.handler=accHandler;
}
}
============
public class SipServiceManager extends BroadcastReceiver{
@Override
public void onReceive(Context arg0, Intent arg1) {
Log.e("","-------BroadcastReceiver--> " + arg1.getAction());
//开机
if(arg1.getAction().toString().equals(Intent.ACTION_BOOT_COMPLETED)){
arg0.startService(new Intent("cn.zte.sip.SERVICE"));
}
//关机
else if(arg1.getAction().toString().equals(Intent.ACTION_SHUTDOWN)){
arg0.stopService(new Intent("cn.zte.sip.SERVICE"));
}
}
}
============
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:text="启动Service"
android:id="@+id/startButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:text="转向按钮"
android:id="@+id/redirectId"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
==================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:text="转向Main界面"
android:id="@+id/redirectId2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:text="关闭本界面"
android:id="@+id/closeId"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
======
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test.android"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<service android:name="com.test.android.SipService">
<intent-filter>
<action android:name="com.test.android.SERVICE" />
</intent-filter>
</service>
<receiver android:name="com.test.android.SipServiceManager" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.ACTION_SHUTDOWN" />
</intent-filter>
</receiver>
<activity android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SecondActivity" android:screenOrientation="landscape" />
</application>
</manifest>
发表评论
-
让Activity后台运行
2012-02-27 09:50 0http://fonter.iteye.com/blog/68 ... -
SurfaceView的使用总结
2012-02-18 16:12 0参考以下网址: http://enefry.iteye.com ... -
Android学习
2012-02-18 16:00 0http://kb.cnblogs.com/a/2325724 ... -
LayoutInflater的使用
2012-02-06 16:25 1589实际开发种LayoutInflater这个类还是非常有用 ... -
Activity与ActivityGroup生命周期问题
2012-02-06 13:59 2692为了查看Activity切换经历的生命周期,首先看下面代码: ... -
通过一个android中的handler处理场景想到的
2012-02-03 11:03 2472本程序主要功能步骤如下: 1.利用Timer 编写一个倒 ... -
关于Service的使用
2012-01-18 14:06 1055Service是android 系统中的一种组件,它跟Acti ... -
关于Gallery使用
2012-01-15 22:53 1512Grally是可以水平滚动列表元素的布局,一般用来滚动图片。 ... -
Android的动态布局
2012-01-11 19:05 755http://ziyu-1.iteye.com/blog/99 ... -
LayoutInflater的inflate函数用法
2012-01-09 11:35 1712Android里面想要创建一个画面的时候, 初学一般都是新建一 ... -
Android Dialog知识
2012-01-09 11:07 1185Andriod中实现对话框可以使用AlertDialog.Bu ...
相关推荐
在安卓开发中,Service是一种用于在后台长时间运行的组件,它可以独立于用户界面执行任务,例如播放音乐、网络通信等。"不被杀死的 Service"指的是通过特定技术手段实现的Service,它能够在设备清理内存或者用户关闭...
在Android开发中,Service是四大组件之一,它在后台运行,不与用户界面直接交互,常用于执行长时间的任务,如播放音乐、网络通信等。本篇文章将深入解析"android service 简单实例源代码",帮助你理解如何在Android...
Service是Android系统中的一个重要组件,它负责在后台执行长时间运行的操作,不依赖于用户界面。在Android应用开发中,理解Service的启动与停止机制对于创建高效、稳定的后台服务至关重要。 一、Service概述 ...
### Oracle Service_Name 参数详解 #### 一、概述 在Oracle数据库管理中,`service_name`是一个重要的参数,它用于标识数据库实例所提供的服务名称。通过设置正确的`service_name`,可以确保客户端应用程序能够...
在Android应用开发中,Service是用于执行长时间运行操作的一个组件,而Activity是用户与应用交互的界面。将Activity与Service绑定是一种常见的通信方式,尤其在需要在后台运行任务且需要与用户界面保持交互时。本...
在Android开发中,Service是一种可以在后台长时间运行的组件,它不具有用户界面,但可以执行各种后台任务,如播放音乐。本示例的"通过Service播放音频的代码"旨在教你如何利用Service组件来实现音乐播放功能,使得...
Java Service Wrapper 使用总结 Java Service Wrapper 是一种可以将 Java 应用程序发布为可安装的服务的解决方案,它提供了一种简单的方式来将 Java 应用程序打包成一个独立的服务。下面是 Java Service Wrapper ...
在Android应用开发中,Service是四大组件之一,用于在后台长时间运行操作,比如播放音乐、网络通信等。然而,如果不加以控制,用户或者系统可能会多次启动同一个Service,导致不必要的资源消耗和服务的异常行为。本...
在这个"android 录音机 service 例子"中,我们将深入探讨如何结合Service和MediaRecorder来创建一个能够后台录制音频的应用。 1. **Service基础** Service组件是Android应用开发中的关键部分,它可以在没有用户...
在Android应用开发中,Service和Activity是两个非常重要的组件。Service用于在后台执行长时间运行的任务,而Activity则负责用户界面交互。在某些场景下,我们可能需要Service与Activity之间进行数据传递,例如本例中...
ServiceNow是当今流行的企业服务管理平台,它提供了一个集成的系统,允许用户在一个统一的界面中管理和自动化企业内部的各种工作流程。ServiceNow平台的基础手册涵盖了该平台的基本使用方法,包括如何导航、管理记录...
在Android应用开发中,`Service`和`Activity`是两个重要的组件。`Service`用于在后台执行长时间运行的任务,而`Activity`则负责用户界面交互。在某些场景下,我们可能需要在`Service`和`Activity`之间传递数据,比如...
在Android应用开发中,Activity和Service是两个关键组件。Activity代表用户界面,而Service则用于在后台执行长时间运行的任务,不直接与用户交互。在实际项目中,常常需要多个Activity与一个Service进行通信,比如本...
在Android系统中,Service是一种可以在后台长时间运行的组件,它不提供用户界面,但可以执行各种任务,如播放音乐、网络通信等。当设备启动时,我们有时希望某些Service能够自动启动,以便立即开始执行预定的任务,...
"解决 Service Broker 未启动的问题" Service Broker 是 SQL Server 中的一个组件,用于实现异步消息传递。它允许数据库管理员创建可靠的、可扩展的消息应用程序。但是,有时可能会遇到 Service Broker 未启动的...
在Android开发中,Service是应用程序组件之一,用于在后台执行长时间运行的操作,即使用户与应用程序交互界面不直接关联。在某些情况下,我们可能需要启动多个Service来执行不同的任务,但问题在于,如果这些Service...
JavaService-2.0.10 是一个针对Java应用程序的服务包装工具,它允许开发者将Java应用程序作为Windows服务来运行。这个版本提供了32位和64位两种版本,以适应不同操作系统环境的需求。 在Windows系统中,服务是一种...
在Android开发中,Service是应用程序组件之一,用于在后台执行长时间运行的操作,即使用户与应用程序交互的界面已关闭。本篇文章将深入探讨Android中的Service,分析不同类型的Service及其特性,并对比它们之间的...
"Android系统在新进程中启动自定义服务过程(startService)的原理" 在 Android 系统中,startService 函数是一个非常重要的函数,它允许开发者在新进程中启动自定义服务。这项技术可以将一些计算型逻辑从主进程中...
在Android开发中,创建一个基于Service的简易音乐播放器是一个常见的练习,可以帮助开发者理解服务(Service)的概念以及如何处理多媒体播放。在这个项目中,我们关注的是Android 4.1.2版本,它提供了对基本多媒体...