android-adroid新手,service的一些问题

问题描述

adroid新手,service的一些问题

service类:
public class PhoneListenerService extends Service {

@Override
public IBinder onBind(Intent intent) {
    return null;
}
@Override
public void onCreate() {
    Log.e("TAG", "service onCreate()");
    super.onCreate();
    //电话服务管理
    TelephonyManager manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    //监听电话状态
    manager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
}

private PhoneStateListener listener = new PhoneStateListener() {
    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
                    super.onCallStateChanged(state, incomingNumber);
        //打印电话状态改变信息
        Log.e("TAG", "onCallStateChanged state = " + state);
        switch (state) {
            case TelephonyManager.CALL_STATE_IDLE:
                Log.e("TAG", "onCallStateChanged state = " + state);
                break;
            case TelephonyManager.CALL_STATE_RINGING:
                Log.e("TAG", "onCallStateChanged state = " + state);
                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                Log.e("TAG", "onCallStateChanged state = " + state);
                break;
            default:
                break;
        }

    }

};

}

MainActivity:
public class MainActivity extends Activity {
private Button btnStartListening;
TelephonyManager manager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

    btnStartListening = (Button)findViewById(R.id.btnStartListening);
    btnStartListening.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            changeState();

        }
    });

}

public void changeState() {
    if (isServiceRunning(getApplicationContext(),"edwardlol.listenertest.PhoneListenerService")) {
        Log.e("TAG","is running, now stop");
        Intent i = new Intent(getApplicationContext(), PhoneListenerService.class);
        stopService(i);
        btnStartListening.setText("start");
    } else {
        Log.e("TAG","is not running, now start");
        Intent i = new Intent(getApplicationContext(), PhoneListenerService.class);
        startService(i);
        btnStartListening.setText("stop");
    }
}
private boolean isServiceRunning(Context mContext,String className) {
    boolean isRunning = false;
    ActivityManager activityManager = (ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningServiceInfo> serviceList = activityManager.getRunningServices(30);
    if (!(serviceList.size()>0)) {
        return false;
    }
    for (int i=0; i<serviceList.size(); i++) {
        if (serviceList.get(i).service.getClassName().equals(className)) {
            isRunning = true;
            break;
        }
    }
    return isRunning;
}

如上,本想在mainactivity中开始和停止PhoneListenerService
但是停止了服务后打入电话还是能打印log信息,即service中的listener还在工作
而且每条log信息都会出现两次
请教下是什么问题?
刚开始接触android,问题弱请不要笑。。

解决方案

老眼昏花了 两个问题已经解决

解决方案二:

先把生命周期 写好,然后在向里面放程序

解决方案三:

使用bindservice的话,要执行stop和unbind才能停止service

时间: 2016-03-18
Tags: android

android-adroid新手,service的一些问题的相关文章

10个常见的Android开发新手误区

  1.不读Android开发文档 Android开发者网站可以很好的帮助你.很多的文档也可以通过SDK工具下载.这些文档不仅仅是Javadoc API的参考,它包括许多指南.教程.视频.培训以及其他有用的资料来创建Android应用程序. Android训练,通过一些有用的教程示例,指导你解决特定问题或实现特定的功能. 2.不熟悉Android开发工具 Android SDK不仅可以用来编译打包你的应用程序在Android手机上运行,而且它有一整套工具来帮助你构建应用程序.其中一些工具可以帮助

android中的service本质是一个类还是一个方法还是一个对象

问题描述 android中的service本质是一个类还是一个方法还是一个对象 android中的service本质是一个类还是一个方法还是一个对象 当然我明白java中一切都是对象的这种说法 解决方案 service在哪里看到的,作为类的定义它是类,对它实例化创建了对象并且执行就是对象了. 解决方案二: java中一切都是对象 这个说法其实不准确.你能说java中的关键字是对象么? 解决方案三: Service(服务)是Android 核心组件之一,特点就是Android系统帮你实例化他的对象

app低内存-Android怎么保持service中的连接不断掉

问题描述 Android怎么保持service中的连接不断掉 Android应用在service维持了一个与服务器间的socket连接,在调用系统相机拍照的时候,在一些低端机上会因为内存不足而把应用结束掉,拍完照之后应用会回复,但是service中连接的session就变成null了,请问怎么能在拍照时保持这个连接不断掉? 解决方案 android Service 保持cpu 解决方案二: 1.原因是拍照时,把后台的Activity回收了: 2.方法,增加进程的优先级: 具体见我的博客:http

android app 建立service

问题描述 android app 建立service 咱们手机上的app,运行的时候不都在设置里的正在运行的服务中会显示到吗?为什么我的没有显示?是需要建立什么服务吗?应该怎么建立?在哪建立啊? 解决方案 android app.Service 关键问题 解决方案二: 说明你 的server没有启动 成功撒:首先要在 AndroidManifest.xml 声明你的servce :然后 自己在 需要 启动的地方 启动 解决方案三: 你在Android Mainfest里注册了吗?

有木有大神提供一下android中利用Service后台服务进行手机截屏功能的代码?

问题描述 有木有大神提供一下android中利用Service后台服务进行手机截屏功能的代码? 有木有大神提供一下android中利用Service后台服务进行手机截屏功能的代码,?跪求!是在已经root权限下的

浅谈Android Activity与Service的交互方式_Android

实现更新下载进度的功能 1. 通过广播交互 Server端将目前的下载进度,通过广播的方式发送出来,Client端注册此广播的监听器,当获取到该广播后,将广播中当前的下载进度解析出来并更新到界面上. 优缺点分析: 通过广播的方式实现Activity与Service的交互操作简单且容易实现,可以胜任简单级的应用.但缺点也十分明显,发送广播受到系统制约.系统会优先发送系统级广播,在某些特定的情况下,我们自定义的广播可能会延迟.同时在广播接收器中不能处理长耗时操作,否则系统会出现ANR即应用程序无响应

Android开发之Service用法实例_Android

本文实例讲述了Android开发之Service用法.分享给大家供大家参考.具体分析如下: Service是一个生命周期较长而且没有界面的程序. 下面通过一个播放mp3的例子来学习. 先看MainActivity.java package com.example.servicetest; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view

深入剖析Android系统中Service和IntentService的区别_Android

Android中的Service是用于后台服务的,当应用程序被挂到后台的时候,问了保证应用某些组件仍然可以工作而引入了Service这个概念,那么这里面要强调的是Service不是独立的进程,也不是独立的线程,它是依赖于应用程序的主线程的,也就是说,在更多时候不建议在Service中编写耗时的逻辑和操作,否则会引起ANR. 那么我们当我们编写的耗时逻辑,不得不被service来管理的时候,就需要引入IntentService,IntentService是继承Service的,那么它包含了Serv

Android开发新手常见的10个误区_Android

在过去十年中最流行的移动应用开发开发平台中,我们认为,Android平台是一个新开发的最方便的平台.一个廉价的工具,友好的开发者社区,众所周知的编程语言(Java),使得开发Android应用程序从未如此简单.即便如此,我们仍然看到了哪些新的Andr​​oid开发人员不断重复的错误.这里有10个最常见的误区. 1,阅读Andr​​oid文档 Android开发者网站是你获得帮助的最重要地方.大部分的文档既可以随着SDK下载,也可在网上直接查阅(我们推荐在线浏览,因为它是不断更新的).这些文档是不

Android中使用Service实现后台发送邮件功能实例_Android

本文实例讲述了Android中使用Service实现后台发送邮件功能.分享给大家供大家参考,具体如下: 程序如下: import android.app.Activity; import android.content.Intent; import android.content.res.Resources.NotFoundException; import android.os.Bundle; import android.widget.TextView; public class A05Ac