0

アプリケーションのホーム ボタンを押してから再び戻ると、アプリケーションが停止したように見えます。まだ何もしていないので原因はわかりません。つまり、実行されたのは、私の oncreate、onresume、onpause、および on destroy だけです。onresume、onpause、destroy では何もしていません。サービスはまだ開始されていないか、oncreate でデータをロードして初期化しているだけです。もう1つのことは、クラッシュするのではなく、停止または閉じるだけです。エラーなし。onCreate ボタンを共有します。たぶん、これを引き起こしている理由がわかるでしょう。

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        this.requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.layout_landstar_page);

        preferences = getSharedPreferences(pref_data, Context.MODE_PRIVATE);
        alertDialogBuilder = new AlertDialog.Builder(this);
        i = new Intent(this, BGService.class);

        shipmentAvailableLayout = ((LinearLayout)findViewById(R.id.shipment_available_layout));
        shipmentNotAvailableLayout = ((LinearLayout)findViewById(R.id.shipment_notavailable_layout));
        menu = ((RelativeLayout)findViewById(R.id.menu));
        declineBtn = ((Button)findViewById(R.id.declinebtn));
        acceptBtn = ((Button)findViewById(R.id.acceptbtn));
        callHelpDeskBtn = ((Button)findViewById(R.id.callhelpdeskbtn));
        menuBtn = ((ImageView)findViewById(R.id.menubtn));
        refreshBtn = ((ImageView)findViewById(R.id.refreshbtn));
        logoutBtn = ((ImageView)findViewById(R.id.logoutbtn));
        trackingMsgShipment = ((TextView)findViewById(R.id.tracking_message_shipment));

        powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
        wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
                "MyWakeLock");

        registerReceiver(broadcastReceiver, new IntentFilter(BGService.BROADCAST_ACTION));

        final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);

        ((Button)findViewById(R.id.acceptbtn)).setOnTouchListener(new View.OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                if(event.getAction()==MotionEvent.ACTION_DOWN)
                    acceptBtn.setBackgroundResource(R.drawable.accept_selected);
                if(event.getAction()==MotionEvent.ACTION_UP)
                {
                    acceptBtn.setBackgroundResource(R.drawable.accept_idle);

                    if(isNetworkConnected())
                    {
                        acceptLoad();

                    }
                    else
                        noConnection();
                }
                return false;
            }
        });

        ((Button)findViewById(R.id.declinebtn)).setOnTouchListener(new View.OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                if(event.getAction()==MotionEvent.ACTION_DOWN)
                    declineBtn.setBackgroundResource(R.drawable.decline_selected);
                if(event.getAction()==MotionEvent.ACTION_UP)
                {
                    declineBtn.setBackgroundResource(R.drawable.decline_idle);
                    declineLoad();
                }
                return false;
            }
        });

        ((Button)findViewById(R.id.callhelpdeskbtn)).setOnTouchListener(new View.OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                if(event.getAction()==MotionEvent.ACTION_DOWN)
                    callHelpDeskBtn.setBackgroundResource(R.drawable.btn_refresh_selected);
                if(event.getAction()==MotionEvent.ACTION_UP)
                {
                    callHelpDeskBtn.setBackgroundResource(R.drawable.btn_refresh_idle);
                    if(isNetworkConnected())
                    {
                        displayProgressSpinner();
                    }
                    else
                        noConnection();
                }
                return false;
            }
        });

        ((ImageView)findViewById(R.id.menubtn)).setOnTouchListener(new View.OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                if(event.getAction()==MotionEvent.ACTION_DOWN)
                {
                    if(menu.isShown())
                    {
                        menu.setVisibility(View.GONE);
                    }
                    else
                    {
                        menu.setVisibility(View.VISIBLE);
                    }
                }
                return false;
            }
        });

        ((ImageView)findViewById(R.id.refreshbtn)).setOnTouchListener(new View.OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                if(event.getAction()==MotionEvent.ACTION_DOWN)
                {
                    menu.setVisibility(View.GONE);
                    if(isNetworkConnected())
                        displayProgressSpinner();
                    else
                        noConnection();
                }
                return false;
            }
        });

        ((ImageView)findViewById(R.id.logoutbtn)).setOnTouchListener(new View.OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                if(event.getAction()==MotionEvent.ACTION_DOWN)
                {
                    menu.setVisibility(View.GONE);

                    try{
                        checkerTimer.cancel();
                        gpsTimer.cancel();
                        counterTimer2.cancel();
                    }
                    catch (Exception e) {
                        e.printStackTrace();
                    }
                    Log.i("isAccept", preferences.getString("isAccepted",""));

                    alertDialogBuilder.setTitle("Message");
                    alertDialogBuilder
                    .setMessage("Clicking the log out button will stop your GPS and exit the application. Are you sure?")
                        .setCancelable(false)
                        .setNegativeButton("Logout",new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,int id) {

                                SharedPreferences.Editor editor = preferences.edit();
                                editor.putString("isDriverLogin", "True");
                                editor.putString("driverPassword", driverPassword);
                                editor.putString("carrierId", carrierId);
                                editor.putString("CCTID", cctid);
                                editor.putString("shipment", entityShipment);
                                editor.putString("isAccepted", "");
                                editor.commit();
                                getApplicationContext().stopService(i);
                                finish();
                            }
                         })
                        .setPositiveButton("Cancel",new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,int id) {

                            }
                          });


                    AlertDialog alertDialog = alertDialogBuilder.create();
                    alertDialog.show();

                }
                return false;
            }
        });


        Intent intent = getIntent();
        loadSaveDetails(intent);
    }

私のマニフェスト:

<?xml version="1.0" encoding="utf-8"?>

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="17" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" 
    >
    <activity
        android:name="com.nesv.landstar.SplashScreen"
        android:label="@string/app_name" 
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name="com.nesv.landstar.Login"
        android:label="@string/app_name" 
         android:screenOrientation="portrait">
    </activity>

    <activity
        android:name="com.nesv.landstar.DriverLogin"
        android:label="@string/app_name" 
         android:screenOrientation="portrait">
    </activity>

    <activity
        android:name="com.nesv.landstar.LandstarPage"
        android:label="@string/app_name" 
         android:screenOrientation="portrait">
    </activity>

    <service android:name="com.nesv.landstar.BGService"></service>

</application>

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
 <uses-permission android:name="android.permission.WAKE_LOCK" />

1 つ、これは root 化された samsung s3 と通常の samsung s4 では発生しません。S duos バージョン 4.0 で試してみて、ジンジャーブレッドまで下げました。そして、これが起こりました。

別の質問です。eclipseからインストールしてみました。これは起こりませんでした。これは、デバイスの bin フォルダーから取得した apk ファイルをインストールしようとしたときにのみ発生します。

4

2 に答える 2

0

以下のコードを試してください。

public class StartupActivity extends Activity {
     @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            if (needStartApp()) {
                Intent i = new Intent(StartupActivity.this, MainActivity.class);
                startActivity(i);
            }

            finish();
        }

        @Override
        public void onConfigurationChanged(Configuration newConfig) {
            // this prevents StartupActivity recreation on Configuration changes 
            // (device orientation changes or hardware keyboard open/close).
            // just do nothing on these changes:
            super.onConfigurationChanged(null);
        }

        private boolean needStartApp() {
            final ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
            final List<RunningTaskInfo> tasksInfo = am.getRunningTasks(1024);

            if (!tasksInfo.isEmpty()) {
                final String ourAppPackageName = getPackageName();
                RunningTaskInfo taskInfo;
                final int size = tasksInfo.size();
                for (int i = 0; i < size; i++) {
                    taskInfo = tasksInfo.get(i);
                    if (ourAppPackageName.equals(taskInfo.baseActivity.getPackageName())) {
                        // continue application start only if there is the only Activity in the task
                        // (BTW in this case this is the StartupActivity)
                        return taskInfo.numActivities == 1;
                    }
                }
            } 

            return true;
        }

}

このスタートアップ アクティビティからホーム アクティビティを起動します。マニフェストで

<activity android:name=".StartupActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
于 2013-09-25T04:56:27.117 に答える
0

onPause()、onStop()、および onDestroy() をオーバーライドし (それぞれで必ず super.onXXX() を呼び出すようにしてください)、それぞれにログ ステートメントを入れて、システムがアクティビティを破棄することを決定しているかどうかを確認します。低い。その場合、アクティビティに戻ったときに onCreate() を再度呼び出す必要があります。

「開発ツール」アプリには「アクティビティをすぐに破棄する」という設定があり、システムが RAM を必要とするかどうかに関係なく、アクティビティを終了すると常にアクティビティが破棄されます。

于 2013-09-25T02:17:24.410 に答える