在Receiver中多次启动相同的Activity,如果Intent是相同的是不会重新创建Activity的,只有Intent内容不同时才会启动多个Activity。
TestActivity.java 代码段:
package com.example.gonglt1.ltestapp;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;/** * Created by gonglt1 on 2017/2/6. */public class TestActivity extends Activity { PRivate static final String TAG = "glttest"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.e(TAG,"TestActivity :: onCreate"); } @Override protected void onResume() { super.onResume(); Log.e(TAG,"TestActivity :: onResume"); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); Log.e(TAG,"TestActivity :: onNewIntent"); } @Override protected void onPause() { super.onPause(); Log.e(TAG,"TestActivity :: onPause"); } @Override protected void onStop() { super.onStop(); Log.e(TAG,"TestActivity :: onStop"); } @Override protected void onDestroy() { super.onDestroy(); Log.e(TAG,"TestActivity :: onDestroy"); }}TestReceiver.java 代码段:
package com.example.gonglt1.ltestapp;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.media.AudioManager;import android.os.Handler;import android.util.Log;/** * Created by gonglt1 on 2017/1/22. */public class TestReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.e("glttest","TestReceiver :: onReceive"); Intent intent1 = new Intent(context, TestService.class); context.startService(intent1); } }TestService.java 代码:
package com.example.gonglt1.ltestapp;import android.app.Service;import android.content.ContentUris;import android.content.Context;import android.content.Intent;import android.net.Uri;import android.os.IBinder;import android.support.annotation.Nullable;import android.util.Log;/** * Created by gonglt1 on 2017/2/6. */public class TestService extends Service{ @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); } private static int i = 0; @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.e("glttest","TestService :: onStartCommmand"); Intent intent1 = new Intent(this, TestActivity.class); intent1.setData(ContentUris.withAppendedId( Uri.parse("content://" + "com" + "/instances"), i++)); intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION); getapplicationContext().startActivity(intent1); return super.onStartCommand(intent, flags, startId); }}通过cmd命令行发送广播:
adb shell am broadcast -a com.example.gonlt1.ltestapp.CMD_SEND_BROADCAST查看log日志输出如下:
02-06 16:41:05.681 31041-31041/com.example.gonglt1.ltestapp E/glttest: TestReceiver :: onReceive02-06 16:41:05.687 31041-31041/com.example.gonglt1.ltestapp E/glttest: TestService :: onStartCommmand02-06 16:41:05.727 31041-31041/com.example.gonglt1.ltestapp E/glttest: TestActivity :: onCreate02-06 16:41:05.732 31041-31041/com.example.gonglt1.ltestapp E/glttest: TestActivity :: onResume02-06 16:41:11.148 31041-31041/com.example.gonglt1.ltestapp E/glttest: TestReceiver :: onReceive02-06 16:41:11.149 31041-31041/com.example.gonglt1.ltestapp E/glttest: TestService :: onStartCommmand02-06 16:41:11.158 31041-31041/com.example.gonglt1.ltestapp E/glttest: TestActivity :: onPause02-06 16:41:11.169 31041-31041/com.example.gonglt1.ltestapp E/glttest: TestActivity :: onCreate02-06 16:41:11.175 31041-31041/com.example.gonglt1.ltestapp E/glttest: TestActivity :: onResume02-06 16:41:11.240 31041-31041/com.example.gonglt1.ltestapp E/glttest: TestActivity :: onStop如果注释掉TestService.java onStartCommand()方法中的这句代码:
Log.e("glttest","TestService :: onStartCommmand"); Intent intent1 = new Intent(this, TestActivity.class);// intent1.setData(ContentUris.withAppendedId( Uri.parse("content://" + "com" + "/instances"), i++)); intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION); getApplicationContext().startActivity(intent1);再次在cmd命令行中多次发送广播,log输出如下:
02-06 16:58:45.849 31041-31041/com.example.gonglt1.ltestapp E/glttest: TestReceiver :: onReceive02-06 16:58:45.851 31041-31041/com.example.gonglt1.ltestapp E/glttest: TestService :: onStartCommmand02-06 16:58:45.894 31041-31041/com.example.gonglt1.ltestapp E/glttest: TestActivity :: onCreate02-06 16:58:45.903 31041-31041/com.example.gonglt1.ltestapp E/glttest: TestActivity :: onResume02-06 16:58:48.840 31041-31041/com.example.gonglt1.ltestapp E/glttest: TestReceiver :: onReceive02-06 16:58:48.840 31041-31041/com.example.gonglt1.ltestapp E/glttest: TestService :: onStartCommmand02-06 16:58:54.755 31041-31041/com.example.gonglt1.ltestapp E/glttest: TestReceiver :: onReceive02-06 16:58:54.756 31041-31041/com.example.gonglt1.ltestapp E/glttest: TestService :: onStartCommmand从log中看到,只会启动一次TestActivity。
demo点击此处下载
新闻热点
疑难解答