Android receiver 多次启动相同Activity

来源:互联网 发布:手机吉他教学软件 编辑:程序博客网 时间:2024/05/07 21:19

在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点击此处下载

0 0
原创粉丝点击