<!DOCTYPE html>

































































































<html>
<head>


<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width" />

<link rel="shortcut icon" type="image/x-icon" href="../../../../../favicon.ico" />
<title>ServiceTestRule | Android Developers</title>

<!-- STYLESHEETS -->
<link rel="stylesheet"
href="http://fonts.googleapis.com/css?family=Roboto+Condensed">
<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:light,regular,medium,thin,italic,mediumitalic,bold"
  title="roboto">
<link href="../../../../../assets/css/default.css?v=5" rel="stylesheet" type="text/css">


<!-- FULLSCREEN STYLESHEET -->
<link href="../../../../../assets/css/fullscreen.css" rel="stylesheet" class="fullscreen"
type="text/css">


<!-- JAVASCRIPT -->
<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script src="../../../../../assets/js/android_3p-bundle.js" type="text/javascript"></script>
<script type="text/javascript">
  var toRoot = "../../../../../";
  var metaTags = [];
  var devsite = false;
</script>
<script src="../../../../../assets/js/docs.js?v=3" type="text/javascript"></script>



<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-5831155-1', 'android.com');
  ga('create', 'UA-49880327-2', 'android.com', {'name': 'universal'});  // New tracker);
  ga('send', 'pageview');
  ga('universal.send', 'pageview'); // Send page view for new tracker.
</script>

</head>

<body class="gc-documentation
  develop reference" itemscope itemtype="http://schema.org/Article">
  <div id="doc-api-level" class="" style="display:none"></div>
  <a name="top"></a>


<a name="top"></a>

<!-- dialog to prompt lang pref change when loaded from hardcoded URL
<div id="langMessage" style="display:none">
  <div>
    <div class="lang en">
      <p>You requested a page in English, would you like to proceed with this language setting?</p>
    </div>
    <div class="lang es">
      <p>You requested a page in Spanish (Español), would you like to proceed with this language setting?</p>
    </div>
    <div class="lang ja">
      <p>You requested a page in Japanese (日本語), would you like to proceed with this language setting?</p>
    </div>
    <div class="lang ko">
      <p>You requested a page in Korean (한국어), would you like to proceed with this language setting?</p>
    </div>
    <div class="lang ru">
      <p>You requested a page in Russian (Русский), would you like to proceed with this language setting?</p>
    </div>
    <div class="lang zh-cn">
      <p>You requested a page in Simplified Chinese (简体中文), would you like to proceed with this language setting?</p>
    </div>
    <div class="lang zh-tw">
      <p>You requested a page in Traditional Chinese (繁體中文), would you like to proceed with this language setting?</p>
    </div>
    <a href="#" class="button yes" onclick="return false;">
      <span class="lang en">Yes</span>
      <span class="lang es">Sí</span>
      <span class="lang ja">Yes</span>
      <span class="lang ko">Yes</span>
      <span class="lang ru">Yes</span>
      <span class="lang zh-cn">是的</span>
      <span class="lang zh-tw">没有</span>
    </a>
    <a href="#" class="button" onclick="$('#langMessage').hide();return false;">
      <span class="lang en">No</span>
      <span class="lang es">No</span>
      <span class="lang ja">No</span>
      <span class="lang ko">No</span>
      <span class="lang ru">No</span>
      <span class="lang zh-cn">没有</span>
      <span class="lang zh-tw">没有</span>
    </a>
  </div>
</div> -->


  <!-- Header -->
  <div id="header-wrapper">
    <div id="header">




      <div class="wrap" id="header-wrap">
        <div class="col-3 logo">
          <a href="../../../../../index.html">
            <img src="../../../../../assets/images/dac_logo.png"
                srcset="../../../../../assets/images/dac_logo@2x.png 2x"
                width="123" height="25" alt="Android Developers" />
          </a>
          <div class="btn-quicknav" id="btn-quicknav">
            <a href="#" class="arrow-inactive">Quicknav</a>
            <a href="#" class="arrow-active">Quicknav</a>
          </div>
        </div>
        <ul class="nav-x col-9">
            <li class="design">
              <a href="../../../../../design/index.html"
              zh-tw-lang="設計"
              zh-cn-lang="设计"
              ru-lang="Проектирование"
              ko-lang="디자인"
              ja-lang="設計"
              es-lang="Diseñar"
              >Design</a></li>
            <li class="develop"><a href="../../../../../develop/index.html"
              zh-tw-lang="開發"
              zh-cn-lang="开发"
              ru-lang="Разработка"
              ko-lang="개발"
              ja-lang="開発"
              es-lang="Desarrollar"
              >Develop</a></li>
            <li class="distribute last"><a href="../../../../../distribute/index.html"
              zh-tw-lang="發佈"
              zh-cn-lang="分发"
              ru-lang="Распространение"
              ko-lang="배포"
              ja-lang="配布"
              es-lang="Distribuir"
              >Distribute</a></li>
        </ul>




<div class="menu-container">
  <div class="moremenu">
    <div id="more-btn"></div>
  </div>
  <div class="morehover" id="moremenu">
    <div class="top"></div>
    <div class="mid">
      <div class="header">Links</div>
      <ul>
        <li><a href="https://play.google.com/apps/publish/" target="_googleplay">Google Play Developer Console</a></li>
        <li><a href="http://android-developers.blogspot.com/">Android Developers Blog</a></li>
        <li><a href="../../../../../about/index.html">About Android</a></li>
      </ul>
      <div class="header">Android Sites</div>
      <ul>
        <li><a href="http://www.android.com">Android.com</a></li>
        <li class="active"><a>Android Developers</a></li>
        <li><a href="http://source.android.com">Android Open Source Project</a></li>
      </ul>




      <br class="clearfix" />
    </div><!-- end 'mid' -->
    <div class="bottom"></div>
  </div><!-- end 'moremenu' -->

  <div class="search" id="search-container">
    <div class="search-inner">
      <div id="search-btn"></div>
      <div class="left"></div>
      <form onsubmit="return submit_search()">
        <input id="search_autocomplete" type="text" value="" autocomplete="off" name="q"
          onfocus="search_focus_changed(this, true)" onblur="search_focus_changed(this, false)"
          onkeydown="return search_changed(event, true, '../../../../../')"
          onkeyup="return search_changed(event, false, '../../../../../')" />
      </form>
      <div class="right"></div>
      <a class="close hide">close</a>
      <div class="left"></div>
      <div class="right"></div>
    </div><!-- end search-inner -->
  </div><!-- end search-container -->

  <div class="search_filtered_wrapper reference">
    <div class="suggest-card reference no-display">
      <ul class="search_filtered">
      </ul>
    </div>
  </div>

  <div class="search_filtered_wrapper docs">
    <div class="suggest-card dummy no-display">&nbsp;</div>
    <div class="suggest-card develop no-display">
      <ul class="search_filtered">
      </ul>
      <div class="child-card guides no-display">
      </div>
      <div class="child-card training no-display">
      </div>
      <div class="child-card samples no-display">
      </div>
    </div>
    <div class="suggest-card design no-display">
      <ul class="search_filtered">
      </ul>
    </div>
    <div class="suggest-card distribute no-display">
      <ul class="search_filtered">
      </ul>
    </div>
  </div>
</div><!-- end menu-container (search and menu widget) -->



        <!-- Expanded quicknav -->
        <div id="quicknav" class="col-13">
          <ul>
            <li class="about">
              <ul>
                <li><a href="../../../../../about/index.html">About</a></li>
                <li><a href="../../../../../wear/index.html">Wear</a></li>
                <li><a href="../../../../../tv/index.html">TV</a></li>
                <li><a href="../../../../../auto/index.html">Auto</a></li>
              </ul>
            </li>
            <li class="design">
              <ul>
                <li><a href="../../../../../design/index.html">Get Started</a></li>
                <li><a href="../../../../../design/devices.html">Devices</a></li>
                <li><a href="../../../../../design/style/index.html">Style</a></li>
                <li><a href="../../../../../design/patterns/index.html">Patterns</a></li>
                <li><a href="../../../../../design/building-blocks/index.html">Building Blocks</a></li>
                <li><a href="../../../../../design/downloads/index.html">Downloads</a></li>
                <li><a href="../../../../../design/videos/index.html">Videos</a></li>
              </ul>
            </li>
            <li class="develop">
              <ul>
                <li><a href="../../../../../training/index.html"
                  zh-tw-lang="訓練課程"
                  zh-cn-lang="培训"
                  ru-lang="Курсы"
                  ko-lang="교육"
                  ja-lang="トレーニング"
                  es-lang="Capacitación"
                  >Training</a></li>
                <li><a href="../../../../../guide/index.html"
                  zh-tw-lang="API 指南"
                  zh-cn-lang="API 指南"
                  ru-lang="Руководства по API"
                  ko-lang="API 가이드"
                  ja-lang="API ガイド"
                  es-lang="Guías de la API"
                  >API Guides</a></li>
                <li><a href="../../../../../reference/packages.html"
                  zh-tw-lang="參考資源"
                  zh-cn-lang="参考"
                  ru-lang="Справочник"
                  ko-lang="참조문서"
                  ja-lang="リファレンス"
                  es-lang="Referencia"
                  >Reference</a></li>
                <li><a href="../../../../../sdk/index.html"
                  zh-tw-lang="相關工具"
                  zh-cn-lang="工具"
                  ru-lang="Инструменты"
                  ko-lang="도구"
                  ja-lang="ツール"
                  es-lang="Herramientas"
                  >Tools</a>
                </li>
                <li><a href="../../../../../google/index.html">Google Services</a>
                </li>

              </ul>
            </li>
            <li class="distribute last">
              <ul>
                <li><a href="../../../../../distribute/googleplay/index.html">Google Play</a></li>
                <li><a href="../../../../../distribute/essentials/index.html">Essentials</a></li>
                <li><a href="../../../../../distribute/users/index.html">Get Users</a></li>
                <li><a href="../../../../../distribute/engage/index.html">Engage &amp; Retain</a></li>
                <li><a href="../../../../../distribute/monetize/index.html">Monetize</a></li>
                <li><a href="../../../../../distribute/analyze/index.html">Analyze</a></li>
                <li><a href="../../../../../distribute/tools/index.html">Tools &amp; Reference</a></li>
                <li><a href="../../../../../distribute/stories/index.html">Developer Stories</a></li>
              </ul>
            </li>
          </ul>
        </div><!-- /Expanded quicknav -->
      </div><!-- end header-wrap.wrap -->
    </div><!-- end header -->


    <!-- Secondary x-nav -->
    <div id="nav-x">
        <div class="wrap" style="position:relative;z-index:1">





            <ul class="nav-x col-9 develop" style="width:100%">
                <li class="training"><a href="../../../../../training/index.html"
                  zh-tw-lang="訓練課程"
                  zh-cn-lang="培训"
                  ru-lang="Курсы"
                  ko-lang="교육"
                  ja-lang="トレーニング"
                  es-lang="Capacitación"
                  >Training</a></li>
                <li class="guide"><a href="../../../../../guide/index.html"
                  zh-tw-lang="API 指南"
                  zh-cn-lang="API 指南"
                  ru-lang="Руководства по API"
                  ko-lang="API 가이드"
                  ja-lang="API ガイド"
                  es-lang="Guías de la API"
                  >API Guides</a></li>
                <li class="reference"><a href="../../../../../reference/packages.html"
                  zh-tw-lang="參考資源"
                  zh-cn-lang="参考"
                  ru-lang="Справочник"
                  ko-lang="참조문서"
                  ja-lang="リファレンス"
                  es-lang="Referencia"
                  >Reference</a></li>
                <li class="tools"><a href="../../../../../sdk/index.html"
                  zh-tw-lang="相關工具"
                  zh-cn-lang="工具"
                  ru-lang="Инструменты"
                  ko-lang="도구"
                  ja-lang="ツール"
                  es-lang="Herramientas"
                  >Tools</a></li>
                <li class="google"><a href="../../../../../google/index.html"
                  >Google Services</a>
                </li>

            </ul>
        </div>
    </div>
    <!-- /Sendondary x-nav DEVELOP -->



    <div id="searchResults" class="wrap" style="display:none;">
      <h2 id="searchTitle">Results</h2>
      <div id="leftSearchControl" class="search-control">Loading...</div>
    </div>
  </div> <!--end header-wrapper -->

  <div id="sticky-header">
    <div>
      <a class="logo" href="#top"></a>
      <a class="top" href="#top"></a>
      <ul class="breadcrumb">

        <li class="current">ServiceTestRule</li>
      </ul>
    </div>
  </div>





  <div class="wrap clearfix" id="body-content">
    <div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
      <div id="devdoc-nav">
      <div id="api-nav-header">
        <div id="api-level-toggle">
          <label for="apiLevelCheckbox" class="disabled"
            title="Select your target API level to dim unavailable APIs">API level: </label>
          <div class="select-wrapper">
            <select id="apiLevelSelector">
              <!-- option elements added by buildApiLevelSelector() -->
            </select>
          </div>
        </div><!-- end toggle -->
        <div id="api-nav-title">Android APIs</div>
        </div><!-- end nav header -->
      <script>
        var SINCE_DATA = [  ];
        buildApiLevelSelector();
      </script>

      <div id="swapper">
        <div id="nav-panels">
          <div id="resize-packages-nav">
            <div id="packages-nav" class="scroll-pane">

              <ul>

    <li class="api apilevel-">
  <a href="../../../../../reference/android/support/test/package-summary.html">android.support.test</a></li>
    <li class="api apilevel-">
  <a href="../../../../../reference/android/support/test/annotation/package-summary.html">android.support.test.annotation</a></li>
    <li class="api apilevel-">
  <a href="../../../../../reference/android/support/test/espresso/package-summary.html">android.support.test.espresso</a></li>
    <li class="api apilevel-">
  <a href="../../../../../reference/android/support/test/espresso/action/package-summary.html">android.support.test.espresso.action</a></li>
    <li class="api apilevel-">
  <a href="../../../../../reference/android/support/test/espresso/assertion/package-summary.html">android.support.test.espresso.assertion</a></li>
    <li class="api apilevel-">
  <a href="../../../../../reference/android/support/test/espresso/base/package-summary.html">android.support.test.espresso.base</a></li>
    <li class="api apilevel-">
  <a href="../../../../../reference/android/support/test/espresso/contrib/package-summary.html">android.support.test.espresso.contrib</a></li>
    <li class="api apilevel-">
  <a href="../../../../../reference/android/support/test/espresso/intent/package-summary.html">android.support.test.espresso.intent</a></li>
    <li class="api apilevel-">
  <a href="../../../../../reference/android/support/test/espresso/intent/matcher/package-summary.html">android.support.test.espresso.intent.matcher</a></li>
    <li class="api apilevel-">
  <a href="../../../../../reference/android/support/test/espresso/intent/rule/package-summary.html">android.support.test.espresso.intent.rule</a></li>
    <li class="api apilevel-">
  <a href="../../../../../reference/android/support/test/espresso/matcher/package-summary.html">android.support.test.espresso.matcher</a></li>
    <li class="api apilevel-">
  <a href="../../../../../reference/android/support/test/espresso/util/package-summary.html">android.support.test.espresso.util</a></li>
    <li class="api apilevel-">
  <a href="../../../../../reference/android/support/test/filters/package-summary.html">android.support.test.filters</a></li>
    <li class="selected api apilevel-">
  <a href="../../../../../reference/android/support/test/rule/package-summary.html">android.support.test.rule</a></li>
    <li class="api apilevel-">
  <a href="../../../../../reference/android/support/test/runner/package-summary.html">android.support.test.runner</a></li>
    <li class="api apilevel-">
  <a href="../../../../../reference/android/support/test/runner/intent/package-summary.html">android.support.test.runner.intent</a></li>
    <li class="api apilevel-">
  <a href="../../../../../reference/android/support/test/runner/lifecycle/package-summary.html">android.support.test.runner.lifecycle</a></li>
    <li class="api apilevel-">
  <a href="../../../../../reference/android/support/test/uiautomator/package-summary.html">android.support.test.uiautomator</a></li>
              </ul><br/>

            </div> <!-- end packages-nav -->
          </div> <!-- end resize-packages -->
          <div id="classes-nav" class="scroll-pane">



            <ul>



    <li><h2>Classes</h2>
      <ul>
          <li class="api apilevel-"><a href="../../../../../reference/android/support/test/rule/ActivityTestRule.html">ActivityTestRule</a></li>
          <li class="selected api apilevel-"><a href="../../../../../reference/android/support/test/rule/ServiceTestRule.html">ServiceTestRule</a></li>
          <li class="api apilevel-"><a href="../../../../../reference/android/support/test/rule/UiThreadTestRule.html">UiThreadTestRule</a></li>
      </ul>
    </li>



            </ul><br/>


          </div><!-- end classes -->
        </div><!-- end nav-panels -->
        <div id="nav-tree" style="display:none" class="scroll-pane">
          <div id="tree-list"></div>
        </div><!-- end nav-tree -->
      </div><!-- end swapper -->
      <div id="nav-swap">
      <a class="fullscreen">fullscreen</a>
      <a href='#' onclick='swapNav();return false;'><span id='tree-link'>Use Tree Navigation</span><span id='panel-link' style='display:none'>Use Panel Navigation</span></a>
      </div>
    </div> <!-- end devdoc-nav -->
    </div> <!-- end side-nav -->
    <script type="text/javascript">
      // init fullscreen based on user pref
      var fullscreen = readCookie("fullscreen");
      if (fullscreen != 0) {
        if (fullscreen == "false") {
          toggleFullscreen(false);
        } else {
          toggleFullscreen(true);
        }
      }
      // init nav version for mobile
      if (isMobile) {
        swapNav(); // tree view should be used on mobile
        $('#nav-swap').hide();
      } else {
        chooseDefaultNav();
        if ($("#nav-tree").is(':visible')) {
          init_default_navtree("../../../../../");
        }
      }
      // scroll the selected page into view
      $(document).ready(function() {
        scrollIntoView("packages-nav");
        scrollIntoView("classes-nav");
        });
    </script>





<div class="col-12"  id="doc-col">

<div id="api-info-block">


















<div class="sum-details-links">

Summary:









  <a href="#pubctors">Ctors</a>




  &#124; <a href="#pubmethods">Methods</a>



  &#124; <a href="#promethods">Protected Methods</a>



  &#124; <a href="#inhmethods">Inherited Methods</a>

&#124; <a href="#" onclick="return toggleAllClassInherited()" id="toggleAllClassInherited">[Expand All]</a>

</div><!-- end sum-details-links -->
<div class="api-level">




</div>
</div><!-- end api-info-block -->


<!-- ======== START OF CLASS DATA ======== -->

<div id="jd-header">
    public



    class
<h1 itemprop="name">ServiceTestRule</h1>




    extends Object<br/>






      implements

        TestRule








</div><!-- end header -->

<div id="naMessage"></div>

<div id="jd-content" class="api apilevel-">
<table class="jd-inheritance-table">


    <tr>

        <td colspan="2" class="jd-inheritance-class-cell">java.lang.Object</td>
    </tr>


    <tr>

            <td class="jd-inheritance-space">&nbsp;&nbsp;&nbsp;&#x21b3;</td>

        <td colspan="1" class="jd-inheritance-class-cell">android.support.test.rule.ServiceTestRule</td>
    </tr>


</table>







<div class="jd-descr">


<h2>Class Overview</h2>
<p itemprop="articleBody">A JUnit rule that provides a simplified mechanism to start and shutdown your service before
 and after the duration of your test. It also guarantees that the service is successfully
 connected when starting (or binding to) a service. The service can be started
 (or bound) using one of the helper methods. It will automatically be stopped (or unbound) after
 the test completes and any methods annotated with
 <a href="http://junit.sourceforge.net/javadoc/org/junit/After.html"><code>After</code></a> are
 finished.
 <p>
 Note: This rule doesn't support <code><a href="../../../../../reference/android/app/IntentService.html">IntentService</a></code> because it's automatically
 destroyed when <code><a href="../../../../../reference/android/app/IntentService.html#onHandleIntent(android.content.Intent)">onHandleIntent(android.content.Intent)</a></code> finishes
 all outstanding commands. So there is no guarantee to establish a successful connection
 in a timely manner.

 <p>
 Usage:
 <pre>
 &#064;Rule
 public final ServiceTestRule mServiceRule = new ServiceTestRule();

 &#064;Test
 public void testWithStartedService() {
     mServiceRule.startService(
         new Intent(InstrumentationRegistry.getTargetContext(), MyService.class));
     //do something
 }

 &#064;Test
 public void testWithBoundService() {
     IBinder binder = mServiceRule.bindService(
         new Intent(InstrumentationRegistry.getTargetContext(), MyService.class));
     MyService service = ((MyService.LocalBinder) binder).getService();
     assertTrue("True wasn't returned", service.doSomethingToReturnTrue());
 }
 </pre>
 <p>
</p>





</div><!-- jd-descr -->
















<div class="jd-descr">


<h2>Summary</h2>























<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<table id="pubctors" class="jd-sumtable"><tr><th colspan="12">Public Constructors</th></tr>




    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol"><nobr>





            </nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad"><a href="../../../../../reference/android/support/test/rule/ServiceTestRule.html#ServiceTestRule()">ServiceTestRule</a></span>()</nobr>

        <div class="jd-descrdiv">
          Creates a <code><a href="../../../../../reference/android/support/test/rule/ServiceTestRule.html">ServiceTestRule</a></code> with a default timeout of <code><a href="../../../../../">.DEFAULT_TIMEOUT</a></code> seconds




        </div>

  </td></tr>



</table>






<!-- ========== METHOD SUMMARY =========== -->
<table id="pubmethods" class="jd-sumtable"><tr><th colspan="12">Public Methods</th></tr>




    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol"><nobr>





            Statement</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad"><a href="../../../../../reference/android/support/test/rule/ServiceTestRule.html#apply(org.junit.runners.model.Statement, org.junit.runner.Description)">apply</a></span>(Statement base, Description description)</nobr>

  </td></tr>



    <tr class=" api apilevel-" >
        <td class="jd-typecol"><nobr>





            IBinder</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad"><a href="../../../../../reference/android/support/test/rule/ServiceTestRule.html#bindService(android.content.Intent, android.content.ServiceConnection, int)">bindService</a></span>(Intent intent, ServiceConnection connection, int flags)</nobr>

        <div class="jd-descrdiv">
          Starts the service under test, in the same way as if it were started by
 <code><a href="../../../../../reference/android/content/Context.html#bindService(android.content.Intent, android.content.ServiceConnection, int)">Context.bindService(Intent, ServiceConnection, flags)</a></code> with an
 <code><a href="../../../../../reference/android/content/Intent.html">Intent</a></code> that identifies a service.



        </div>

  </td></tr>



    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol"><nobr>





            IBinder</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad"><a href="../../../../../reference/android/support/test/rule/ServiceTestRule.html#bindService(android.content.Intent)">bindService</a></span>(Intent intent)</nobr>

        <div class="jd-descrdiv">
          Works just like
 <code><a href="../../../../../reference/android/support/test/rule/ServiceTestRule.html#bindService(android.content.Intent, android.content.ServiceConnection, int)">bindService(android.content.Intent, android.content.ServiceConnection, int)</a></code> except
 uses an internal <code><a href="../../../../../reference/android/content/ServiceConnection.html">ServiceConnection</a></code> to guarantee successful bound.



        </div>

  </td></tr>



    <tr class=" api apilevel-" >
        <td class="jd-typecol"><nobr>





            void</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad"><a href="../../../../../reference/android/support/test/rule/ServiceTestRule.html#startService(android.content.Intent)">startService</a></span>(Intent intent)</nobr>

        <div class="jd-descrdiv">
          Starts the service under test and blocks until the service is connected, in the same way as
 if it were started by <code><a href="../../../../../reference/android/content/Context.html#startService(android.content.Intent)">Context.startService(Intent)</a></code> with an <code><a href="../../../../../reference/android/content/Intent.html">Intent</a></code> that identifies a
 service.



        </div>

  </td></tr>



    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol"><nobr>



            static

            <a href="../../../../../reference/android/support/test/rule/ServiceTestRule.html">ServiceTestRule</a></nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad"><a href="../../../../../reference/android/support/test/rule/ServiceTestRule.html#withTimeout(long, java.util.concurrent.TimeUnit)">withTimeout</a></span>(long timeout, TimeUnit timeUnit)</nobr>

        <div class="jd-descrdiv">
          Factory method to create a <code><a href="../../../../../reference/android/support/test/rule/ServiceTestRule.html">ServiceTestRule</a></code> with a custom timeout



        </div>

  </td></tr>



</table>




<!-- ========== METHOD SUMMARY =========== -->
<table id="promethods" class="jd-sumtable"><tr><th colspan="12">Protected Methods</th></tr>




    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol"><nobr>





            void</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad"><a href="../../../../../reference/android/support/test/rule/ServiceTestRule.html#afterService()">afterService</a></span>()</nobr>

        <div class="jd-descrdiv">
          Override this method to do your own service specific clean up after the service is shutdown.



        </div>

  </td></tr>



    <tr class=" api apilevel-" >
        <td class="jd-typecol"><nobr>





            void</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad"><a href="../../../../../reference/android/support/test/rule/ServiceTestRule.html#beforeService()">beforeService</a></span>()</nobr>

        <div class="jd-descrdiv">
          Override this method to do your own service specific initialization before starting or
 binding to the service.



        </div>

  </td></tr>



</table>





<!-- ========== METHOD SUMMARY =========== -->
<table id="inhmethods" class="jd-sumtable"><tr><th>
  <a href="#" class="toggle-all" onclick="return toggleAllInherited(this, null)">[Expand]</a>
  <div style="clear:left;">Inherited Methods</div></th></tr>


<tr class="api apilevel-" >
<td colspan="12">
  <a href="#" onclick="return toggleInherited(this, null)" id="inherited-methods-java.lang.Object" class="jd-expando-trigger closed"
          ><img id="inherited-methods-java.lang.Object-trigger"
          src="../../../../../assets/images/triangle-closed.png"
          class="jd-expando-trigger-img" /></a>
From class

  java.lang.Object

<div id="inherited-methods-java.lang.Object">
  <div id="inherited-methods-java.lang.Object-list"
        class="jd-inheritedlinks">
  </div>
  <div id="inherited-methods-java.lang.Object-summary" style="display: none;">
    <table class="jd-sumtable-expando">




    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol"><nobr>





            Object</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad">clone</span>()</nobr>

  </td></tr>



    <tr class=" api apilevel-" >
        <td class="jd-typecol"><nobr>





            boolean</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad">equals</span>(Object arg0)</nobr>

  </td></tr>



    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol"><nobr>





            void</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad">finalize</span>()</nobr>

  </td></tr>



    <tr class=" api apilevel-" >
        <td class="jd-typecol"><nobr>


            final


            Class&lt;?&gt;</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad">getClass</span>()</nobr>

  </td></tr>



    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol"><nobr>





            int</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad">hashCode</span>()</nobr>

  </td></tr>



    <tr class=" api apilevel-" >
        <td class="jd-typecol"><nobr>


            final


            void</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad">notify</span>()</nobr>

  </td></tr>



    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol"><nobr>


            final


            void</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad">notifyAll</span>()</nobr>

  </td></tr>



    <tr class=" api apilevel-" >
        <td class="jd-typecol"><nobr>





            String</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad">toString</span>()</nobr>

  </td></tr>



    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol"><nobr>


            final


            void</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad">wait</span>()</nobr>

  </td></tr>



    <tr class=" api apilevel-" >
        <td class="jd-typecol"><nobr>


            final


            void</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad">wait</span>(long arg0, int arg1)</nobr>

  </td></tr>



    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol"><nobr>


            final


            void</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad">wait</span>(long arg0)</nobr>

  </td></tr>


</table>
  </div>
</div>
</td></tr>



<tr class="api apilevel-" >
<td colspan="12">
  <a href="#" onclick="return toggleInherited(this, null)" id="inherited-methods-org.junit.rules.TestRule" class="jd-expando-trigger closed"
          ><img id="inherited-methods-org.junit.rules.TestRule-trigger"
          src="../../../../../assets/images/triangle-closed.png"
          class="jd-expando-trigger-img" /></a>
From interface

  org.junit.rules.TestRule

<div id="inherited-methods-org.junit.rules.TestRule">
  <div id="inherited-methods-org.junit.rules.TestRule-list"
        class="jd-inheritedlinks">
  </div>
  <div id="inherited-methods-org.junit.rules.TestRule-summary" style="display: none;">
    <table class="jd-sumtable-expando">




    <tr class="alt-color api apilevel-" >
        <td class="jd-typecol"><nobr>
            abstract




            Statement</nobr>
        </td>
        <td class="jd-linkcol" width="100%"><nobr>
        <span class="sympad">apply</span>(Statement arg0, Description arg1)</nobr>

  </td></tr>


</table>
  </div>
</div>
</td></tr>


</table>


</div><!-- jd-descr (summary) -->

<!-- Details -->








<!-- XML Attributes -->


<!-- Enum Values -->


<!-- Constants -->


<!-- Fields -->


<!-- Public ctors -->


<!-- ========= CONSTRUCTOR DETAIL ======== -->
<h2>Public Constructors</h2>



<A NAME="ServiceTestRule()"></A>

<div class="jd-details api apilevel-">
    <h4 class="jd-details-title">
      <span class="normal">
        public





      </span>
      <span class="sympad">ServiceTestRule</span>
      <span class="normal">()</span>
    </h4>
      <div class="api-level">
        <div></div>



      </div>
    <div class="jd-details-descr">




  <div class="jd-tagdata jd-tagdescr"><p>Creates a <code><a href="../../../../../reference/android/support/test/rule/ServiceTestRule.html">ServiceTestRule</a></code> with a default timeout of <code><a href="../../../../../">.DEFAULT_TIMEOUT</a></code> seconds
</p></div>

    </div>
</div>





<!-- ========= CONSTRUCTOR DETAIL ======== -->
<!-- Protected ctors -->



<!-- ========= METHOD DETAIL ======== -->
<!-- Public methdos -->

<h2>Public Methods</h2>



<A NAME="apply(org.junit.runners.model.Statement, org.junit.runner.Description)"></A>

<div class="jd-details api apilevel-">
    <h4 class="jd-details-title">
      <span class="normal">
        public




        Statement
      </span>
      <span class="sympad">apply</span>
      <span class="normal">(Statement base, Description description)</span>
    </h4>
      <div class="api-level">
        <div></div>



      </div>
    <div class="jd-details-descr">




  <div class="jd-tagdata jd-tagdescr"><p></p></div>

    </div>
</div>


<A NAME="bindService(android.content.Intent, android.content.ServiceConnection, int)"></A>

<div class="jd-details api apilevel-">
    <h4 class="jd-details-title">
      <span class="normal">
        public




        IBinder
      </span>
      <span class="sympad">bindService</span>
      <span class="normal">(Intent intent, ServiceConnection connection, int flags)</span>
    </h4>
      <div class="api-level">
        <div></div>



      </div>
    <div class="jd-details-descr">




  <div class="jd-tagdata jd-tagdescr"><p>Starts the service under test, in the same way as if it were started by
 <code><a href="../../../../../reference/android/content/Context.html#bindService(android.content.Intent, android.content.ServiceConnection, int)">Context.bindService(Intent, ServiceConnection, flags)</a></code> with an
 <code><a href="../../../../../reference/android/content/Intent.html">Intent</a></code> that identifies a service. However, it waits for
 <code><a href="../../../../../reference/android/content/ServiceConnection.html#onServiceConnected(android.content.ComponentName, android.os.IBinder)">onServiceConnected(android.content.ComponentName, android.os.IBinder)</a></code> to be called before returning.</p></div>
  <div class="jd-tagdata">
      <h5 class="jd-tagtitle">Parameters</h5>
      <table class="jd-tagtable">
        <tr>
          <th>intent</td>
          <td>Identifies the service to connect to.  The Intent may
                   specify either an explicit component name, or a logical
                   description (action, category, etc) to match an
                   <code><a href="../../../../../reference/android/content/IntentFilter.html">IntentFilter</a></code> published by a service.</td>
        </tr>
        <tr>
          <th>connection</td>
          <td>Receives information as the service is started and stopped.
                   This must be a valid ServiceConnection object; it must not be null.</td>
        </tr>
        <tr>
          <th>flags</td>
          <td>Operation options for the binding.  May be 0,
                   <code><a href="../../../../../reference/android/content/Context.html#BIND_AUTO_CREATE">BIND_AUTO_CREATE</a></code>,
                   <code><a href="../../../../../reference/android/content/Context.html#BIND_DEBUG_UNBIND">BIND_DEBUG_UNBIND</a></code>,
                   <code><a href="../../../../../reference/android/content/Context.html#BIND_NOT_FOREGROUND">BIND_NOT_FOREGROUND</a></code>,
                   <code><a href="../../../../../reference/android/content/Context.html#BIND_ABOVE_CLIENT">BIND_ABOVE_CLIENT</a></code>,
                   <code><a href="../../../../../reference/android/content/Context.html#BIND_ALLOW_OOM_MANAGEMENT">BIND_ALLOW_OOM_MANAGEMENT</a></code>, or
                   <code><a href="../../../../../reference/android/content/Context.html#BIND_WAIVE_PRIORITY">BIND_WAIVE_PRIORITY</a></code>.</td>
        </tr>
      </table>
  </div>
  <div class="jd-tagdata">
      <h5 class="jd-tagtitle">Returns</h5>
      <ul class="nolist"><li>An object whose type is a subclass of IBinder, for making further calls into
 the service.</li></ul>
  </div>
  <div class="jd-tagdata">
      <h5 class="jd-tagtitle">Throws</h5>
      <table class="jd-tagtable">
        <tr>
            <th>SecurityException</td>
            <td>if the called doesn't have permission to bind to the given service.</td>
        </tr>
        <tr>
            <th>TimeoutException</td>
            <td>if timed out waiting for a successful connection with the service.</td>
        </tr>
      </table>
  </div>
  <div class="jd-tagdata">
      <h5 class="jd-tagtitle">See Also</h5>
      <ul class="nolist"><li><code><a href="../../../../../reference/android/content/Context.html#BIND_AUTO_CREATE">BIND_AUTO_CREATE</a></code></li><li><code><a href="../../../../../reference/android/content/Context.html#BIND_DEBUG_UNBIND">BIND_DEBUG_UNBIND</a></code></li><li><code><a href="../../../../../reference/android/content/Context.html#BIND_NOT_FOREGROUND">BIND_NOT_FOREGROUND</a></code></li>
      </ul>
  </div>

    </div>
</div>


<A NAME="bindService(android.content.Intent)"></A>

<div class="jd-details api apilevel-">
    <h4 class="jd-details-title">
      <span class="normal">
        public




        IBinder
      </span>
      <span class="sympad">bindService</span>
      <span class="normal">(Intent intent)</span>
    </h4>
      <div class="api-level">
        <div></div>



      </div>
    <div class="jd-details-descr">




  <div class="jd-tagdata jd-tagdescr"><p>Works just like
 <code><a href="../../../../../reference/android/support/test/rule/ServiceTestRule.html#bindService(android.content.Intent, android.content.ServiceConnection, int)">bindService(android.content.Intent, android.content.ServiceConnection, int)</a></code> except
 uses an internal <code><a href="../../../../../reference/android/content/ServiceConnection.html">ServiceConnection</a></code> to guarantee successful bound.
 The operation option flag defaults to <code><a href="../../../../../reference/android/content/Context.html#BIND_AUTO_CREATE">BIND_AUTO_CREATE</a></code></p></div>
  <div class="jd-tagdata">
      <h5 class="jd-tagtitle">Throws</h5>
      <table class="jd-tagtable">
        <tr>
            <th>TimeoutException</td>
            <td></td>
        </tr>
      </table>
  </div>
  <div class="jd-tagdata">
      <h5 class="jd-tagtitle">See Also</h5>
      <ul class="nolist"><li><code><a href="../../../../../reference/android/support/test/rule/ServiceTestRule.html#bindService(android.content.Intent, android.content.ServiceConnection, int)">bindService(android.content.Intent, android.content.ServiceConnection, int)</a></code></li>
      </ul>
  </div>

    </div>
</div>


<A NAME="startService(android.content.Intent)"></A>

<div class="jd-details api apilevel-">
    <h4 class="jd-details-title">
      <span class="normal">
        public




        void
      </span>
      <span class="sympad">startService</span>
      <span class="normal">(Intent intent)</span>
    </h4>
      <div class="api-level">
        <div></div>



      </div>
    <div class="jd-details-descr">




  <div class="jd-tagdata jd-tagdescr"><p>Starts the service under test and blocks until the service is connected, in the same way as
 if it were started by <code><a href="../../../../../reference/android/content/Context.html#startService(android.content.Intent)">Context.startService(Intent)</a></code> with an <code><a href="../../../../../reference/android/content/Intent.html">Intent</a></code> that identifies a
 service. If you use this method to start the service, it is automatically stopped at the
 end of the test run. However, it also binds to the service and waits for
 <code><a href="../../../../../reference/android/content/ServiceConnection.html#onServiceConnected(android.content.ComponentName, android.os.IBinder)">onServiceConnected(android.content.ComponentName, android.os.IBinder)</a></code> to be called to ensure successful connection.</p></div>
  <div class="jd-tagdata">
      <h5 class="jd-tagtitle">Parameters</h5>
      <table class="jd-tagtable">
        <tr>
          <th>intent</td>
          <td>An Intent that identifies a service, of the same form as the Intent passed to
               <code><a href="../../../../../reference/android/content/Context.html#startService(android.content.Intent)">Context.startService
               (Intent)</a></code>.</td>
        </tr>
      </table>
  </div>
  <div class="jd-tagdata">
      <h5 class="jd-tagtitle">Throws</h5>
      <table class="jd-tagtable">
        <tr>
            <th>SecurityException</td>
            <td>if you do not have permission to bind to the given service.</td>
        </tr>
        <tr>
            <th>TimeoutException</td>
            <td>if timed out waiting for a successful connection with the service.
</td>
        </tr>
      </table>
  </div>

    </div>
</div>


<A NAME="withTimeout(long, java.util.concurrent.TimeUnit)"></A>

<div class="jd-details api apilevel-">
    <h4 class="jd-details-title">
      <span class="normal">
        public
        static



        <a href="../../../../../reference/android/support/test/rule/ServiceTestRule.html">ServiceTestRule</a>
      </span>
      <span class="sympad">withTimeout</span>
      <span class="normal">(long timeout, TimeUnit timeUnit)</span>
    </h4>
      <div class="api-level">
        <div></div>



      </div>
    <div class="jd-details-descr">




  <div class="jd-tagdata jd-tagdescr"><p>Factory method to create a <code><a href="../../../../../reference/android/support/test/rule/ServiceTestRule.html">ServiceTestRule</a></code> with a custom timeout</p></div>
  <div class="jd-tagdata">
      <h5 class="jd-tagtitle">Parameters</h5>
      <table class="jd-tagtable">
        <tr>
          <th>timeout</td>
          <td>the amount of time to wait for a service to connect.</td>
        </tr>
        <tr>
          <th>timeUnit</td>
          <td>the time unit representing how the timeout parameter should be interpreted</td>
        </tr>
      </table>
  </div>
  <div class="jd-tagdata">
      <h5 class="jd-tagtitle">Returns</h5>
      <ul class="nolist"><li>a <code><a href="../../../../../reference/android/support/test/rule/ServiceTestRule.html">ServiceTestRule</a></code> with the desired timeout
</li></ul>
  </div>

    </div>
</div>





<!-- ========= METHOD DETAIL ======== -->

<h2>Protected Methods</h2>



<A NAME="afterService()"></A>

<div class="jd-details api apilevel-">
    <h4 class="jd-details-title">
      <span class="normal">
        protected




        void
      </span>
      <span class="sympad">afterService</span>
      <span class="normal">()</span>
    </h4>
      <div class="api-level">
        <div></div>



      </div>
    <div class="jd-details-descr">




  <div class="jd-tagdata jd-tagdescr"><p>Override this method to do your own service specific clean up after the service is shutdown.
 The method is called after each test method is executed including any method annotated with
 <a href="http://junit.sourceforge.net/javadoc/org/junit/After.html"><code>After</code></a>
 and after necessary calls to stop (or unbind) the service under test were called.
</p></div>

    </div>
</div>


<A NAME="beforeService()"></A>

<div class="jd-details api apilevel-">
    <h4 class="jd-details-title">
      <span class="normal">
        protected




        void
      </span>
      <span class="sympad">beforeService</span>
      <span class="normal">()</span>
    </h4>
      <div class="api-level">
        <div></div>



      </div>
    <div class="jd-details-descr">




  <div class="jd-tagdata jd-tagdescr"><p>Override this method to do your own service specific initialization before starting or
 binding to the service. The method is called before each test method is executed including
 any method annotated with
 <a href="http://junit.sourceforge.net/javadoc/org/junit/Before.html"><code>Before</code></a>.
 Do not start or bind to a service from here!
</p></div>

    </div>
</div>





<!-- ========= END OF CLASS DATA ========= -->
<A NAME="navbar_top"></A>

<div id="footer" class="wrap" >


  <div id="copyright">

  Except as noted, this content is licensed under <a
  href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0</a>.
  For details and restrictions, see the <a href="../../../../../license.html">
  Content License</a>.
  </div>
  <div id="build_info">

    Android &nbsp;r &mdash;
<script src="../../../../../timestamp.js" type="text/javascript"></script>
<script>document.write(BUILD_TIMESTAMP)</script>

  </div>


  <div id="footerlinks">

  <p>
    <a href="../../../../../about/index.html">About Android</a>&nbsp;&nbsp;|&nbsp;
    <a href="../../../../../legal.html">Legal</a>&nbsp;&nbsp;|&nbsp;
    <a href="../../../../../support.html">Support</a>
  </p>
  </div>

</div> <!-- end footer -->
</div> <!-- jd-content -->

</div><!-- end doc-content -->

</div> <!-- end body-content -->






</body>
</html>
