AutoStart应用程序无法正常工作

我有一个简单的AutoStart应用与TimerTask实现,在几乎很多设备中工作正常。 问题是,它不是在Samsung Galaxy Y(2.3.6)DELL XCD35(2.2) 。 当设备引导TimerTask工作几秒钟,然后closures。 我检查了Application->Manage Application ,我看到Application->Manage Application已经在Force Stop状态。 这意味着一些如何我的应用程序几秒钟后停止。 那么,这两个设备中这种weird behaviour的原因是什么,如果任何人有解决scheme共享它。

以下是我的代码。

MyReceiver.java

 public class MyReceiver extends BroadcastReceiver{ private Timer mTimer = new Timer(); @Override public void onReceive(Context context, Intent arg1) { Toast.makeText(context, "Device Booted", Toast.LENGTH_LONG).show(); Log.d("TAG","Device Booted"); mTimer.scheduleAtFixedRate(new MyTimerTask(), 2000,2000); } private class MyTimerTask extends TimerTask { @Override public void run() { Log.d("TAG","TimerTask executed...."); } } } 

AndroidManifest.xml中

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.autostart.app" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <receiver android:name=".MyReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> </application> </manifest> 

  • 当为一个MenuItem的ActionView使用布局时,我应该传递什么?
  • 一个活动与另一个活动之间的animation过渡
  • 如何设置android的动作条标签的高度
  • ListView divider在Android 5中不显示
  • Android +带有自定义视图层次结构的ListFragment
  • TextView的椭圆大小(...)不起作用
  • 为什么突然我得到了错误“无法parsing目标'android-9'”?
  • CardView中不必要的填充?
  • 我会build议你使用AlarmManager而不是TimerTask,因为我遇到了你在许多设备中描述过的同样的问题。

      public void onReceive(Context context, Intent arg1) { Toast.makeText(context, "Device Booted", Toast.LENGTH_LONG).show(); Log.d("TAG","Device Booted"); AlarmManager AM =(AlarmManager)getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(); intent.setAction("ALARM_MANAGER_ACTION");//can add any string action here PendingIntent pi = PendingIntent.getBroadcast(mContext .getApplicationContext(), 0, intent,0); AM.set(AlarmManager.RTC,selectedTime, pi); AM.setRepeating(AM.RTC_WAKEUP, System.currentTimeMillis()+2000, 2000, pi); } public class MyReceiver1 extends BroadcastReceiver{ //event will come here private Timer mTimer = new Timer(); @Override public void onReceive(Context context, Intent arg1) { // check if event is same as you broadcasted through alarmManager Toast.makeText(context, "Device Booted", Toast.LENGTH_LONG).show(); Log.d("TAG","TimerTask executed...."); } 

    在您的应用程序中添加一个广播接收器,应该监听("ALARM_MANAGER_ACTION")操作。 并将此操作添加到清单文件中。 我敢打赌,它也将在这两个设备上工作。

    我认为在某些Android OS有时候会杀死那些在Android不熟悉或者无法识别的Devices运行的线程。 这就是TimerTask在某些设备上工作的原因,在某些设备上工作了5-10秒,然后应用程序在Device Boot被Android OS automatically 强制停止注意 – 从pipe理应用程序强制停止,而不是强制closures所以我没有得到任何错误在Logcat )。

    所以在这种情况下,解决scheme是使用Android OS识别的inbuilt Mechanism ,并且不会将其杀死并保持运行模式。 在这种情况下,我pipe理使用AlarmManager来执行我的任务,它的工作原理。

    我可能不是正确的,但我最终的解决scheme是使用AlarmManager使我的应用程序在每个设备中工作。

     @Override public void onReceive(Context context, Intent arg1) { Intent myIntent = new Intent(context, AlarmService.class); PendingIntent pendingIntent = PendingIntent. getService(context, 0, myIntent, 0); AlarmManager alarmManager = (AlarmManager) context .getSystemService(Context.ALARM_SERVICE); alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 2000, 2000, pendingIntent); } 

    更新:

    AlaramManager is critical system service that runs all the time.