Activity
- 两个button进行toast和activity的测试
- 记得配置service
public class DialogActivity extends AppCompatActivity {
public static Context context;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dialog);
context = this;
}
public void toast(View view) {
Intent intent = new Intent(context, DialogService.class);
intent.putExtra("flag", false);
startService(intent);
}
public void dialog(View view) {
Intent intent = new Intent(context, DialogService.class);
intent.putExtra("flag", true);
startService(intent);
}
}
Service
public class DialogService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent,
int flags, int startId) {
if(intent.getBooleanExtra("flag", false)) {
new AlertDialog.Builder(this)
.setTitle("flag")
.setIcon(R.mipmap.ic_launcher)
.setMessage("dialog is available")
.create()
.show();
} else {
Toast.makeText(this, "toast is available", Toast.LENGTH_SHORT).show();
}
return super.onStartCommand(intent, flags, startId);
}
}
测试结果一: 点击dialog报错,点击toast可以正常弹出吐司
原因: dialog必须依赖于window存在,一般只能在Activity中显示
由于Service也是继承Context的,所以toast可以正常弹出
测试二: 将Activity的context设置成全区变量,使用Activity的context创建dialog
结果: 可以正常弹出dialog
原因: 必须使用Activity的context才能正常显示,依存于Activity创建的窗口存在
测试二: 将Activity的context设置成全区变量,使用Activity的context创建dialog
结果: 可以正常弹出dialog
原因: 必须使用Activity的context才能正常显示,依存于Activity创建的窗口存在
测试三: 将Activity的theme设置成Theme.Dialog,将Activity以dialog的形式显示出来
结果: 后台service可以正常弹出dialog
原因: 有activity当然就可以创建dialog了
测试四:
1.在dialog show之前调用dialog.getWindow()
.setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
2.在manifest中添加权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
3. 修改弹出dialog的方法
public void dialog(View view) {
handler.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(context, DialogService.class);
intent.putExtra("flag", true);
startService(intent);
}
}, 5000L);
finish();
}
结果: 虽然网上都说可以正常弹出,但是
原因: 未知错误 - - ,待续…