相关文章推荐
飞奔的灯泡  ·  数据库技术 | Oracle 中国·  3 周前    · 
一身肌肉的茄子  ·  如何定义 select ...·  1 年前    · 
耍酷的脸盆  ·  小白学习MySQL - ...·  1 年前    · 
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议 》和 《 阿里云开发者社区知识产权保护指引 》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单 进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <Button
        android:id="@+id/btnStartActivity"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="启动 activity" />
    <Button
        android:id="@+id/btnStartService"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="启动service" />
     <Button
        android:id="@+id/btnStopService"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="停止 service" />
</LinearLayout>
import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; public class MainActivity extends Activity implements OnClickListener{ @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); setListener(); private void setListener() { findViewById(R.id.btnStartActivity).setOnClickListener( this ); findViewById(R.id.btnStartService).setOnClickListener( this ); findViewById(R.id.btnStopService).setOnClickListener( this ); @Override public void onClick(View v) { Intent intent = new Intent(); switch (v.getId()) { case R.id.btnStartActivity: intent.setAction( "com.sxt.day07_05.start_activity"); // 发送一条广播,被MyReceiver接收到, break ; case R.id.btnStartService: intent.setAction( "com.sxt.day07_05.start_service" ); break ; case R.id.btnStopService: intent.setAction( "com.sxt.day07_05.stop_service" ); break ; sendBroadcast(intent); // 发送广播 import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 收到广播 String action= intent.getAction(); Intent intent2 = null ; if (action.equals("com.sxt.day07_05.start_activity" )){ // 启动SecondActivity intent2= new Intent(context, SecondActivity. class ); // context是上下文,就是发送广播的Activity intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 标志,一个Activity启动另一个Activity不用这个,因为2个Activity处于同一个任务栈,广播接收者没有任务栈,所以必出把SecondActivity启动在一个新的任务栈。因为每个Activity都在任务栈里面。 context.startActivity(intent2); } else if (action.equals("com.sxt.day07_05.start_service" )){ intent2 = new Intent(context, MyService. class ); context.startService(intent2); // 启动service } else if (action.equals("com.sxt.day07_05.stop_service" )){ intent2 = new Intent(context, MyService. class ); context.stopService(intent2); // 停止service @Override // service是一个后台进程,onBind,onStartCommand,onDestroy以on开头的方法都是在主线程执行的,所以为了不占用主线程的时间,这些方法里面的代码都要开辟工作线程执行。 public int onStartCommand(Intent intent, int flags, int startId) { // 耗时操作都要在工作线程里面写 // 即使这个service停止了,但是这个工作线程仍然不会停, // 在Activity和service写的工作线程,即使Activity和service销毁了,这个工作线程还在执行。 new Thread(){ public void run() { while (mLooper){ SystemClock.sleep( 1000 ); Log.i( "main","service is loop..." ); }.start(); return super .onStartCommand(intent, flags, startId); @Override public void onDestroy() { super .onDestroy(); mLooper = false ; // service销毁工作线程不会停止,因此要mLooper=false @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.second, menu); return true; < RelativeLayout xmlns:android ="http://schemas.android.com/apk/res/android" xmlns:tools ="http://schemas.android.com/tools" android:layout_width ="match_parent" android:layout_height ="match_parent" android:paddingBottom ="@dimen/activity_vertical_margin" android:paddingLeft ="@dimen/activity_horizontal_margin" android:paddingRight ="@dimen/activity_horizontal_margin" android:paddingTop ="@dimen/activity_vertical_margin" tools:context =".SecondActivity" > < TextView android:layout_width ="wrap_content" android:layout_height ="wrap_content" android:text ="SecondActivity" /> </ RelativeLayout >
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.sxt.day07_05"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.sxt.day07_05.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>
        <receiver android:name="com.sxt.day07_05.MyReceiver" >   一个广播接收者接收3个action,3个字符串,3个频道的广播,
            <intent-filter>
                <action android:name="com.sxt.day07_05.start_activity" />
                <action android:name="com.sxt.day07_05.start_service" />
                <action android:name="com.sxt.day07_05.stop_service" />
            </intent-filter>
        </receiver>
        <service android:name="com.sxt.day07_05.MyService" />    声明service
        <activity                                                                        声明activity
            android:name="com.sxt.day07_05.SecondActivity"
            android:label="@string/title_activity_second" >
        </activity>
    </application>
</manifest>