如果进程在后台并且操作系统决定它需要资源(RAM,CPU等),Android将终止进程.我需要能够在测试期间模拟这种行为,以便我可以确保我的应用程序正常运行.我希望能够以自动方式执行此操作,以便我可以测试应用程序在发生这种情况时是否正常运行,这意味着我必须在每个活动中对此进行测试等.
我知道如何杀死我的进程.那不是问题.问题是,当我杀死我的过程(使用DDMS, ,adb shell kill,Process.killProcess()等)的Android不重新启动它以同样的方式,它将如果Android操作系统杀死了它本身.
如果Android操作系统终止进程(由于资源要求),当用户返回应用程序时,Android将重新创建该进程,然后在活动堆栈上重新创建顶级活动(调用onCreate()).
另一方面,如果我终止进程,Android会假定活动堆栈顶部的活动表现不佳,因此它会自动重新创建进程,然后从活动堆栈中删除顶级活动并重新创建下面的活动顶级活动(调用onCreate()`).这不是我想要的行为.我想要与Android杀死进程时相同的行为.
只是用图解来解释,如果我的活动堆栈看起来像这样:
ActivityA -> ActivityB -> ActivityC -> ActivityD
Run Code Online (Sandbox Code Playgroud)
如果Android终止进程并且用户返回应用程序,Android将重新创建该进程并创建ActivityD.
如果我终止该过程,Android将重新创建该过程并创建ActivityC.
public class Npe {
static class Thing {
long value;
}
public static Map<Thing, Long> map;
public static void main(String[] args) {
Thing thing = new Thing();
method(null); // returns -1
method(thing); // returns 0
map = new HashMap<Thing, Long>();
method(null); // returns -1
method(thing); // NullPointerException thrown inside this method call
}
public static long method(Thing thing) {
if (thing == null) {
return -1;
}
Long v = (map == null) ? thing.value : map.get(thing); // NPE here …Run Code Online (Sandbox Code Playgroud) 我有一个由活动启动(未绑定)的服务.如果活动被破坏(例如通过按下后退按钮),则服务继续运行,这当然是有意的.但是,如果我将活动从"最近的应用"列表中滑出,则会立即重新启动该服务.这是可重现的,每次从列表中删除活动/应用程序时,都会对服务的onCreate方法进行新调用.两者之间没有调用onDestroy!
首先我认为服务被android杀死了,尽管我没有看到杀人的理由(活动和服务都没有资源消耗的东西,事实上它们是简约的,什么都不做).但后来我注意到服务实际上崩溃了.
V/MainActivity(856): onDestroy // swipe out of the list
I/ActivityManager(287): Killing 856:com.example.myapp/u0a10050: remove task
W/ActivityManager(287): Scheduling restart of crashed service com.example.myapp/.TestService in 5000ms
Run Code Online (Sandbox Code Playgroud)
代码并不值得注意,但在这里
活动:
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.v(TAG, "onCreate, starting service...");
startService(new Intent(this, TestService.class));
}
@Override
protected void onStart() {
super.onStart();
Log.v(TAG, "onStart");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.v(TAG, "onDestroy");
}
//[...]
}
Run Code Online (Sandbox Code Playgroud)
服务:
public class TestService extends …Run Code Online (Sandbox Code Playgroud) 我在Android中请求权限后尝试执行片段事务 - 但应用程序不断崩溃.如何更改此代码以避免这种情况?
任何帮助表示赞赏.
在发送电子邮件之前检查许可:
private void emailShare() {
if (mayRequestContacts()) {
emailShareImpl();
}
}
Run Code Online (Sandbox Code Playgroud)
检查许可:
private boolean mayRequestContacts() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
return true;
}
requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS);
return false;
}
Run Code Online (Sandbox Code Playgroud)
允许检查结果:
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == REQUEST_READ_CONTACTS) {
if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
emailShareImpl();
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果获得批准,则启动碎片交易:
private void emailShareImpl() {
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
EmailReferDialog mEmailReferDialog = new EmailReferDialog();
mEmailReferDialog.setCancelable(true);
mEmailReferDialog.show(fragmentManager, "EMAIL_REFER_DIALOG"); …Run Code Online (Sandbox Code Playgroud) android android-intent android-fragments android-permissions android-savedstate
请帮我解决这个问题。我给出了 git 的链接。
https://github.com/Vasajj/radio_tysa_fm.git
PendingIntent 出现问题,包:
在 android 8 上一切都很好
Installing build\app\outputs\flutter-apk\app.apk...
Debug service listening on ws://127.0.0.1:55138/iMdUmbZTaNc=/ws
Syncing files to device sdk gphone64 x86 64...
I/javaClass(18284): Calling to method: initService
I/javaClass(18284): start service invoked
I/javaClass(18284): Attempting to initialize service...
I/javaClass(18284): Service not bound, binding now....
I/javaClass(18284): Mapping method call to player item object
I/javaClass(18284): Firing up service. (onStartCommand)...
I/javaClass(18284): LocalBroadCastManager Received...
W/e.radio_tysa_f(18284): Accessing hidden method Landroid/media/AudioTrack;->getLatency()I (unsupported, reflection, allowed)
I/ExoPlayerImpl(18284): Init 398a550 [ExoPlayerLib/2.13.1] [emulator64_x86_64_arm64, sdk_gphone64_x86_64, Google, 32]
I/javaClass(18284): Pushing Event: …Run Code Online (Sandbox Code Playgroud) 我需要改变Spinner下拉列表的水平位置.这是截图:

我希望这个下拉列表在主图标/文本下面的一行中显示,这样看起来很好
如图所示:

这是我在xml中所做的:
<Spinner
android:id="@+id/tvHeader"
style="@style/spinner_style"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/ver_main_donate_background_tile_long"
android:layout_alignTop="@+id/ver_main_donate_background_tile_long"
android:layout_marginTop="5dp"
android:layout_toRightOf="@+id/icon_main_header"
android:spinnerMode="dropdown"
android:dropDownHorizontalOffset="-15dp"
android:gravity="left|center_vertical"
android:text="@string/name_of_product" />
Run Code Online (Sandbox Code Playgroud)
所以,正如我想的那样,
android:spinnerMode="dropdown"
android:dropDownHorizontalOffset="-15dp"
Run Code Online (Sandbox Code Playgroud)
应该做的伎俩,但正如你在截图上看到的那样,它不起作用
我在Google Developer上阅读了它:
("android.net.conn.CONNECTIVITY_CHANGE")操作只要连接详细信息发生更改
我有这个代码:
公共类MainActivity扩展AppCompatActivity {
private NetworkChangeReceiver receiver;
private boolean connIntentFilterIsRegistered;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
receiver = new NetworkChangeReceiver();
}
@Override
protected void onPause() {
super.onPause();
if (connIntentFilterIsRegistered) {
unregisterReceiver(receiver);
connIntentFilterIsRegistered = false;
}
}
@Override
protected void onResume() {
super.onResume();
if (!connIntentFilterIsRegistered) {
registerReceiver(receiver, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"));
connIntentFilterIsRegistered = true;
}
}
Run Code Online (Sandbox Code Playgroud)
和//
公共类NetworkUtil {
public static int TYPE_WIFI = 1;
public static int TYPE_MOBILE = 0;
public static int TYPE_NOT_CONNECTED = 2;
public static …Run Code Online (Sandbox Code Playgroud) 下面提到的代码主题显示在其他电子邮件帐户中,但在 gmail 中显示为空白。
Intent j = new Intent(Intent.ACTION_SENDTO);
j.setData(Uri.parse("mailto:appsupport@prali.in"));
j.putExtra(Intent.EXTRA_SUBJECT, "Request approval for Kiranam Registration - " + KiranamUserId);
startActivity(Intent.createChooser(j, "Select your mail account to send mail for Approval"));
Run Code Online (Sandbox Code Playgroud) 我正在尽力将文本垂直居中,但我无法做到.问题是我有一行按钮,其高度= fill_parent和weight = 1,随着行变小,我的文本开始触摸视图的底部,如下所示:

我尝试去除填充,边距,更改高度等.但似乎没有做到这一点.
即使文本大小接近视图高度,如何将其垂直对齐?
这是包含数字5的视图的代码:
<Button
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="5"
android:layout_weight="1"
tools:ignore="HardcodedText"
android:clickable="false"
android:textSize="90dp"
android:textColor="?attr/color1"
android:gravity="center"
android:paddingLeft="@dimen/normal_margin"
android:paddingRight="@dimen/normal_margin"
android:padding="0dp" />
Run Code Online (Sandbox Code Playgroud) 我想安排一个每 1 分钟触发一次的闹钟并唤醒我的应用程序。它适用于模拟器,但不适用于定制的操作系统手机,如 VIVO、OPPO、MIUI 等。我编写了粘性服务和广播接收器。当服务将被销毁或 TaskRemoved 时,我调用了名为 sendBroadcast() 的方法,该方法将触发我的广播接收器,而我的 Brodcast 接收器将通过调用 startservice(intent) 方法再次启动服务。但这在应用程序被杀死时不起作用。当应用程序在前台时它工作正常。我希望警报管理器在应用程序被杀死时能够工作。
这是我下面的代码--
我的 MainActivity.java 文件启动服务--
public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent alarmIntent = new Intent(this, AlarmService.class);
startService(alarmIntent);
} }
Run Code Online (Sandbox Code Playgroud)
我的粘性服务代码是——
public class AlarmService extends Service
{
private String TAG ="AlarmService";
@Override
public void onCreate()
{
sendBroadcast();
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
Log.e(TAG, "onStartCommand");
//return super.onStartCommand(intent, flags, startId);
return Service.START_STICKY;
}
@Override
public …Run Code Online (Sandbox Code Playgroud)